我一直在努力想出一種插入檢查的方式,以便它不會允許付款日期早於發票日期。基本上,我有兩張表:發票和付款。所以我想要一個支票約束來在發票表中的購買日期之前輸入付款日期。發票表中的invoice_id是付款表中的FK。任何幫助?在Oracle中檢查約束條件
0
A
回答
3
檢查約束只能查看它在其上定義的表上的列。
您需要使用TRIGGER來執行此操作。
2
一種方法可能是在付款表中複製購買日期,在invoice_id +購買日期的組合上添加第二個唯一約束,然後修改FK約束以包含它。然後,你可以有你的行級約束。例如
CREATE TABLE invoices
(invoice_id NUMBER NOT NULL
, purchase_date DATE NOT NULL
, CONSTRAINT invoice_pk PRIMARY KEY (invoice_id)
, CONSTRAINT invoice_uk UNIQUE (invoice_id, purchase_date)
);
CREATE TABLE payments
(payment_id NUMBER NOT NULL
, invoice_id NUMBER NOT NULL
, purchase_date DATE NOT NULL
, payment_date DATE NOT NULL
, CONSTRAINT payment_pk PRIMARY KEY (payment_id)
, CONSTRAINT payment_invoice_fk
FOREIGN KEY (invoice_id, purchase_date)
REFERENCES invoices (invoice_id, purchase_date)
, CONSTRAINT payment_date_ck
CHECK (payment_date >= purchase_date)
);
缺點:更新invoices.purchase_date變得有點棘手。
相關問題
- 1. 在Oracle SQL中檢查約束條件
- 2. Oracle約束:混合唯一性和檢查約束條件
- 3. Oracle檢查約束
- 4. Oracle檢查約束
- 5. Oracle約束檢查
- 6. 檢查約束的條件
- 7. 在Oracle中檢查約束條件是或否
- 8. 一個Oracle檢查約束
- 9. 約束檢查Oracle SQL
- 10. Oracle SQL在多表級別添加檢查約束條件
- 11. Oracle找到約束條件
- 12. 檢查SQL中的約束條件
- 13. 在oracle中找不到約束條件
- 14. Oracle中的日期檢查約束
- 15. 檢查表上的約束條件
- 16. 檢查mysql的約束條件
- 17. 檢查默認約束條件
- 18. Postgres 9.2 - 添加條件約束檢查
- 19. 列上的SQL檢查約束條件
- 20. 檢查父表的約束條件
- 21. SQL集檢查約束條件
- 22. 觸發器與檢查約束條件
- 23. oracle db中的條件唯一約束
- 24. Oracle中的完整性約束條件
- 25. 僅在Oracle SQL中檢查日期和月份的約束條件
- 26. Oracle檢查完整性約束
- 27. Oracle約束日期檢查SQL
- 28. Oracle - 觸發器每月檢查約束
- 29. 什麼檢查該Oracle約束
- 30. 在NHibernate中檢查約束
您可以使用相同的觸發器。 – 2012-04-05 05:12:44
使用之前插入和檢查日期選擇並相互比較,所以你可以作出插入決定 – 2012-04-05 07:24:44