Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 更新后在DML触发器中调用对象成员函数(ORACLE数据库)_Database_Oracle_Object_Triggers_Mutating Table - Fatal编程技术网

Database 更新后在DML触发器中调用对象成员函数(ORACLE数据库)

Database 更新后在DML触发器中调用对象成员函数(ORACLE数据库),database,oracle,object,triggers,mutating-table,Database,Oracle,Object,Triggers,Mutating Table,我有一个数据库,其中包含对象的表PRODUCTS,其中主键是EAN字段。每次更新一行时,我都要调用新对象Productmodified的成员函数。我扣动了这个扳机: 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

我有一个数据库,其中包含对象的表
PRODUCTS
,其中
主键是
EAN
字段。每次更新一行时,我都要调用新对象
Product
modified的成员函数。我扣动了这个扳机:

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;
但当我更新
产品时
会出现以下错误:

table PRODUCTS is mutating, trigger/function may not see it
正如我所怀疑的那样。有办法吗?谢谢

您无法从表中查找行(对象),因为这会导致您看到和期望看到的突变表错误

您可以直接引用受影响的对象:

自10g版本1(10.1)以来,您可以在对象表的触发器中使用
OBJECT_值
pseudo列<代码>对象\u值
表示对象作为一个整体。这是它使用的一个例子。您还可以使用OBJECT_值作为IN-formal参数的数据类型来调用PL/SQL函数

所以你可以做:

BEGIN

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

END;
/
您无法从表中查找行(对象),因为这会导致您看到和预期看到的“变异表”错误

您可以直接引用受影响的对象:

自10g版本1(10.1)以来,您可以在对象表的触发器中使用
OBJECT_值
pseudo列<代码>对象\u值表示对象作为一个整体。这是它使用的一个例子。您还可以使用OBJECT_值作为IN-formal参数的数据类型来调用PL/SQL函数

所以你可以做:

BEGIN

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

END;
/