2016-07-27 51 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

相关问题