次のようなトリガーがあります。
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
たが、機能しません。どこで問題が発生しているのか気になります。