トリガーの学習を始めたばかりです。そして、私はテスト後に挿入すると、ユーザーに「挿入を成功させる」という通知を与えるトリガーを作りたい。挿入後のオラクル・トリガー・プリント
ここに私のコードです。
create table test (id number, name varchar2(30));
create trigger tr_test
after insert on test
for each row
begin
dbms_output.put_line('insert successfully');
end;
/
insert into test values(1, 'john');
そして、私はこのようなエラーが出ます:
ERROR at line 1:
ORA-04091: table YUFENG.TEST is mutating, trigger/function may not see it
ORA-06512: at "YUFENG.TR_TEST", line 3
ORA-04088: error during execution of trigger 'YUFENG.TR_TEST'
誰がエラーを指摘し、どのようにコードを変更する方法を教えてもらえますか?
申し訳ありませんが、私は、クエリを実行できないような単純な間違いがたくさんあることに気付きませんでした。そして、私の元のコードはトリガで変数を宣言しますが、投稿しませんでした。私はおそらくそれがエラーを突然変異させる理由だと思います。
CREATE or REPLACE TRIGGER TR_TEST
AFTER INSERT ON TEST
FOR EACH ROW
DECLARE a VARCHAR2(30);
BEGIN
SELECT ID INTO a FROM TEST WHERE ID=:NEW.ID;
DBMS_OUTPUT.PUT_LINE('insert successfully');
END;
/
投稿コードには、トリガの原因となるものは何もありません。明らかにこれは実行しているコードではないので、何がポイントですか?突然変異のテーブルの質問は、このサイトではかなり一般的です。 ORA-04091を簡単に検索すると、文字通り数百のヒットが返されます。 – APC
ありがとうございます。私の元のコードの問題はおそらくテーブルの質問を変更することと同じです。 – yufeng