我有一个触发器如下:
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
省略异常块,但它不起作用。我想知道问题出在哪里。