我试图在一个名为race的表中创建一个触发器,该表强制执行一个约束,即“STARTDATE< = MEETING.ENDDATE”
换句话说,竞赛表中的 startdate 必须小于或等于会议桌的 enddate (此日期后不能开始运行!)
我希望在将记录添加到竞赛表时触发触发器并且输入的startdate是错误的(startdate是在会议桌的结束日期之后)
到目前为止我创造了这个,但我不知道我是对的还是我如何完成它!
CREATE OR REPLACE TRIGGER race_date_trg
BEFORE INSERT OR UPDATE
ON RACE
FOR EACH ROW
WHEN (NEW.RACEID)
DECLARE STARTDATE DATE;
BEGIN
SELECT * FROM meeting INTO VARIABLE
IF STARTDATE <= ENDDATE THEN
INSERT INTO RACE (STARTDATE) VALUES (:n.startdate);
else
end (race_date_trg);
谢谢你的帮助!
答案 0 :(得分:1)
你的触发器有很多错误。
触发器可能如下所示:
CREATE OR REPLACE TRIGGER race_date_trg
BEFORE INSERT OR UPDATE
ON RACE
FOR EACH ROW
DECLARE
MEETING_ENDDATE DATE;
BEGIN
SELECT ENDDATE INTO MEETING_ENDDATE FROM meeting;
IF :NEW.STARTDATE > MEETING_ENDDATE THEN
RAISE_APPLICATION_ERROR(-20000, 'Wrong start date!');
END IF:
end race_date_trg;