2016-04-01 3 views
0

私は状況をよりよく説明する例を得ました。私はテーブルAdbに挿入したばかりの行を編集します

CREATE TABLE A(ID NUMBER, VAL NVARCHAR2(255)) 

を持っていると私は

を得る

INSERT INTO A VALUES(1, 'XX') 

私は挿入を実行すると、それだけで

CREATE OR REPLACE TRIGGER XXX 
    AFTER INSERT 
    ON A 
    FOR EACH ROW 

DECLARE 

BEGIN 
    UPDATE A SET VAL = 'LOL' WHERE ID = :NEW.ID; 
END; 

を挿入しています行の更新を行うトリガーを作成します
ORA-04091: table name is mutating, trigger/function may not see it 

回避策はありますか?

+1

可能な複製(http://stackoverflow.com/questions/26072577/update-same-table-after-insert-trigger)リンク –

+0

(重複)質問のショー一つのアプローチ。しかしそれには挿入してから更新する理由があります。あなたのダミーコードでは、単に挿入または挿入前のトリガーに 'LOL'を供給するのではなく、なぜこれをやりたいのか分かりません。あなたの実際のworl要件を説明するならば、より適切またはより完全な答えがあるかもしれません。 –

答えて

0

更新する必要はありません。新しい値をBEFOREトリガーに割り当てるだけです。

CREATE OR REPLACE TRIGGER XXX 
    BEFORE INSERT --<< You need a BEFORE trigger for this to work. 
    ON A 
    FOR EACH ROW 
BEGIN 
    :new.val := 'LOL'; 
END; 
[INSERTトリガ後のアップデート同じテーブル]の
+0

これは私が必要なものです、ありがとう! – Phate01

+1

@ Phate01:実際には、Oracleのマニュアルを読む時間が必要です。これはすべて文書化されています –

関連する問題