我一直在努力想出一種插入檢查的方式,以便它不會允許付款日期早於發票日期。基本上,我有兩張表:發票和付款。所以我想要一個支票約束來在發票表中的購買日期之前輸入付款日期。發票表中的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. 檢查約束的條件
- 5. 約束檢查Oracle SQL
- 6. 一個Oracle檢查約束
- 7. Oracle SQL在多表級別添加檢查約束條件
- 8. 檢查SQL中的約束條件
- 9. Oracle找到約束條件
- 10. 列上的SQL檢查約束條件
- 11. 檢查表上的約束條件
- 12. Oracle中的完整性約束條件
- 13. oracle db中的條件唯一約束
- 14. 檢查約束
- 15. 檢查約束
- 16. 檢查約束
- 17. 檢查約束
- 18. 檢查約束
- 19. 檢查約束
- 20. 在search_condition的值後查詢Oracle約束條件
- 21. 在SQL Server 2008中檢查約束條件
- 22. 在檢查約束中使用日期,Oracle
- 23. 檢查在表中增加約束(Oracle)的
- 24. 如何在oracle sql中檢查非空列約束?
- 25. PostgreSQL檢查約束
- 26. SQL約束檢查
- 27. 檢查sql約束
- 28. 如何在語句前運行檢查約束條件
- 29. 在創建表格時檢查約束條件返回錯誤
- 30. url_for如何檢查我的routes.rb中的約束條件
您可以使用相同的觸發器。 – 2012-04-05 05:12:44
使用之前插入和檢查日期選擇並相互比較,所以你可以作出插入決定 – 2012-04-05 07:24:44