2016-07-27 12 views
0

Productの表PRODUCTSの表を持つデータベースがあります。PRIMARY KEYEANフィールドです。行が更新されるたびに、私は新しいオブジェクトのメンバ関数を呼び出すためにProductを修正します。私はこのトリガー製:更新後のDMLトリガーのオブジェクト・メンバー関数(ORACLEデータベース)

CREATE OR REPLACE TRIGGER SHOW_PROFIT_PERCENTAGE 
AFTER UPDATE ON PRODUCTS 
FOR EACH ROW 

DECLARE 

P Product; 

BEGIN 

    SELECT VALUE(PS) INTO P 
    FROM PRODUCTS PS 
    WHERE EAN = :NEW.EAN; 

    DBMS_OUTPUT.PUT_LINE('Profit percentage: ' || P.getProfit()); 

END; 

を私はPRODUCTSを更新するとき、それは私に、このエラーを与える:私が疑われるよう

table PRODUCTS is mutating, trigger/function may not see it 

。それを行う方法はありますか?ありがとう!

答えて

3

テーブルから行(オブジェクト)を参照することはできません。これは、見たと予想される変異テーブルエラーを引き起こすためです。

あなたは、直接影響を受けるオブジェクトにat least from 10gを参照することができます。

You can use the OBJECT_VALUE pseudocolumn in a trigger on an object table since 10g Release 1 (10.1). OBJECT_VALUE means the object as a whole. This is one example of its use. You can also call a PL/SQL function with OBJECT_VALUE as the datatype of an IN formal parameter.

だから、あなただけ行うことができます。

BEGIN 

    DBMS_OUTPUT.PUT_LINE('Profit percentage: ' || :NEW.OBJECT_VALUE.getProfit()); 

END; 
/
+0

おかげでたくさん!今それは動作します! – Maghio

関連する問題