检查Oracle中的约束

时间:2012-04-05 04:45:14

标签: oracle constraints

我一直在努力找出一种方法来插入支票,这样它就不会允许支付日期早于发票日期。基本上,我有两个表:发票和付款。所以我想要一个支票约束来支付发票表中购买日期之前的日期。发票表中的invoice_id是付款表中的FK。有什么帮助吗?

2 个答案:

答案 0 :(得分:3)

检查约束只能查看定义的表上的列。

你需要使用TRIGGER来做到这一点。

答案 1 :(得分:2)

一种方法可能是在付款表中复制购买日期,在invoice_id +购买日期的组合上添加第二个唯一约束,然后修改FK约束以包含它。然后,您可以拥有行级约束。 e.g。

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变得有点棘手。