我有一个触发如下: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你也可以有一个变量,如果异常被引发或者没有设置一个不同的值,并且在“所有捕获到的异常”之后应用你的动作(不确定这是否真的很清楚))。 –