使用此触发代码时:
CREATE TRIGGER Verify_deathDate
BEFORE INSERT Or UPDATE of deathDate, birthDate on Actor
FOR EACH ROW
BEGIN
IF (:NEW.deathDate < :NEW.birthDate) THEN
Raise_application_error(-20000, 'birthDate should be before deathDate');
END IF;
END;
/
然后这个更新查询:
UPDATE Actor SET deathDate = '28-Dec-1937' , birthDate = '29-Dec-1938'
WHERE actorID = '00069';
我得到以下代码(只有一个是正确的):
ORA-20000: birthDate should be before deathDate
ORA-06512: at "OPS$U0853885.CHECK_DEATHDATE", line 3
ORA-04088: error during execution of trigger 'OPS$xxxxxxxx.CHECK_DEATHDATE'
Oracle建议您仅在不能使用CHECK约束的情况下使用触发器来约束数据。由于这实际上是更简单的,您可能应该在这种情况下使用它;
CREATE TABLE Actor (
id int,
name varchar(32),
birthdate date,
deathdate date,
CONSTRAINT birth_death CHECK (deathdate > birthdate)
);
这将在没有额外触发器的情况下强制执行您的业务规则。
在这里演示。