Попытка создать триггер, чтобы проверить, есть ли в моей базе данных более одного президента - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь выяснить, есть ли в моей базе данных более одного президента с триггером, и если да, вывести ошибку, я использую hr, сотрудники таблицы, и мне нужно использовать job_id, чтобы найти ее. Вот как выглядит мой код. Спасибо!

CREATE OR REPLACE TRIGGER check_pres
BEFORE INSERT OR DELETE OR UPDATE ON employees
FOR EACH ROW
BEGIN
    IF ((employees.job_id = 'AD_PRES') > 1)
    THEN RAISE_APPLICATION_ERROR(-12345, 'More than one President in database.');
    END IF;
END;

1 Ответ

1 голос
/ 14 апреля 2020

Вы должны использовать Statement Level Trigger вместо Row Level Trigger, удалив FOR EACH ROW выражение

CREATE OR REPLACE TRIGGER check_pres
  BEFORE INSERT OR DELETE OR UPDATE ON employees
DECLARE    
    v_cnt int;
BEGIN

    SELECT COUNT(*) INTO v_cnt FROM employees WHERE job_id = 'AD_PRES';

  IF ( v_cnt > 1 ) THEN
    RAISE_APPLICATION_ERROR(-20345, 'More than one President in database.');
  END IF;
END;

, иначе вы получите ошибку мутирования при получении значения счетчика. Кстати, значение первого аргумента для RAISE_APPLICATION_ERROR должно быть между -20999 и -20000

...