2016-07-27 49 views
0

我有一個表PRODUCTS對象的數據庫Product其中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

相關問題