У меня есть триггер следующим образом:SQL, если в другом месте альтернативных действий
CREATE OR REPLACE TRIGGER trig
BEFORE INSERT ON table
FOR EACH ROW
DECLARE
dummy CHAR(30);
BEGIN
SELECT fooID into dummy
FROM Foo
WHERE FooID = :new.FooID;
IF SQL%FOUND THEN
--action 1...
ELSE
--action 2...
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20001, 'NO DATA');
END;
/
Я хочу, чтобы триггер работать таким образом, когда запись найдена в Foo
таблицы, то он может сделать действие 1 или иным образом сделать действие 2. но триггер прямо перейдите к NO_DATA_FOUND
исключение, когда запись в Foo
таблица не найдена.
означает, что, когда я тестирую его, если запись найдена, это действие 1, если нет, оно пропустило действие 2 и перешло к NO_DATA_FOUND
, что не то, что я хочу.
Я также пробовал ELSIF
на NOT SQL%FOUND
или опустить блок исключений, но он не работает. Мне интересно, где проблема.
, что если я еще больше операторов выбора ниже, что я, возможно, придется иметь более 1 'EXCEPTION' –
@HolaAmigos ну да, конечно. Вы можете иметь столько блоков 'BEGIN EXCEPTION END', сколько вам нужно. Но трудно сказать «просто так», как вы должны это решить. –
@HolaAmigos, вы также можете иметь переменную, установить другое значение, если исключение возникло или нет, и применить свое действие после «всех уловленных исключений» (не уверен, что это действительно ясно;)). –