Я пытаюсь реализовать триггер на уровне заявления, чтобы обеспечить соблюдение следующего правила: «Кандидат не может подавать заявки на более чем две должности за один день».
Я могу обеспечить это с помощью триггера уровня строки (как показано ниже), но я не знаю, как это сделать с помощью триггера уровня оператора, когда я не могу использовать: 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;