У меня настроен триггер вставки / обновления, который запрещает сотруднику одновременно существовать в двух таблицах. Он отлично работает с перехватом нелегальных вставок / обновлений, но я также получаю еще одно сообщение об ошибке при тестировании триггера с недопустимыми вставками / обновлениями.
Вот мой код:
CREATE OR REPLACE TRIGGER check_foobar
BEFORE INSERT OR UPDATE OF VarX ON FOOBAR
FOR EACH ROW
DECLARE
counter NUMBER(38);
BEGIN
SELECT count(*)
INTO counter
FROM BARFOO
WHERE VarX = :NEW.VarX
GROUP BY VarX;
IF counter > 0 THEN
RAISE_APPLICATION_ERROR(-20001, 'This is an illegal insertion/update');
END IF;
EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('TEST');
END;
/
А в ошибках ORA-06512 и ORA-04088 я не уверен:
SQL> INSERT INTO DRIVER VALUES(2, 10345, 'AVAILABLE');
Error starting at line : 26 File @test.sql
In command -
INSERT INTO FOOBAR VALUES(2)
Error report -
ORA-20001: This is an illegal insertion/update
ORA-06512: at "HR.CHECK_FOOBAR", line 11
ORA-04088: error during execution of trigger 'HR.CHECK_FOOBAR'
Когда я добавляю обработчик исключений для оператора select, мой триггер перестает работать правильно, и запрещенная вставка не предотвращается. Но ошибка выполнения предотвращена.
ОБНОВЛЕНИЕ: я добавил группу и исключение для триггера, так что теперь триггер все еще работает с обработчиком исключений, но ошибки ORA-06512 и ORA-04088 по-прежнему приводят к недопустимой вставке / обновлению.
В сообщении об ошибке указана строка 11
GROUP BY VarX;
Любой совет будет высоко ценится.