【发布时间】:2019-06-01 15:27:12
【问题描述】:
我正在尝试实现语句级触发器以强制执行以下“申请人一天内不能申请超过两个职位”。
我可以使用行级触发器(如下所示)来执行它,但是当我不能使用:NEW 或:OLD 时,我不知道如何使用语句级触发器来执行此操作。
我知道使用触发器有其他替代方法,但我正在修改我的考试,可能会有类似的问题,所以我希望能提供任何帮助。
CREATE TABLE APPLIES(
anumber NUMBER(6) NOT NULL, /* applicant number */
pnumber NUMBER(8) NOT NULL, /* position number */
appDate DATE NOT NULL, /* application date*/
CONSTRAINT APPLIES_pkey PRIMARY KEY(anumber, pnumber)
);
CREATE OR REPLACE TRIGGER app_trigger
BEFORE INSERT ON APPLIES
FOR EACH ROW
DECLARE
counter NUMBER;
BEGIN
SELECT COUNT(*) INTO counter
FROM APPLIES
WHERE anumber = :NEW.anumber
AND to_char(appDate, 'DD-MON-YYYY') = to_char(:NEW.appDate, 'DD-MON-YYYY');
IF counter = 2 THEN
RAISE_APPLICATION_ERROR(-20001, 'error msg');
END IF;
END;
【问题讨论】:
标签: oracle plsql database-trigger