触发代码返回“Mutating”错误

时间:2018-02-15 17:14:01

标签: sql oracle plsql

学习触发器,并尝试执行基本任务,在我将一个插入语句执行到另一个名为xml_hours_load的表中之后,我将一个数据条目插入一个名为xml_hours_load_2的表中。但是,在我尝试将insert语句导入xml_hours_load之后,我收到一条错误,内容为: * SQL错误:ORA-04091:表XML_HOURS_LOAD正在变异,触发器/函数可能看不到它 ORA-06512:在“TEST_TRIGGER”,第5行 ORA-04088:执行触发器'TEST_TRIGGER'时出错 04091. 00000 - “表%s。%s正在变异,触发/功能可能看不到它” 原因:触发器(或用户定义的plsql函数,在中引用)            这句话)试图查看(或修改)一个表            在被解雇它的语句修改的过程中。

下面是我的触发器代码和我的插入声明:

create or replace TRIGGER test_trigger
AFTER INSERT
ON xml_hours_load
FOR EACH ROW

DECLARE
varROW_ID Varchar(50);

BEGIN
SELECT row_id INTO varROW_ID
from xml_hours_load;

INSERT INTO xml_hours_load_2
VALUES(varROW_ID, '2', '3', '5', '6', 'hi');
END;

insert into xml_hours_load(product_number, code, 
product_name, product_version, contact)
values('5', 'hello', 'no', '1', 'technical');

1 个答案:

答案 0 :(得分:2)

重写触发器(或函数),使其不读取该表。触发器需要重写为

create or replace TRIGGER test_trigger
AFTER INSERT
ON xml_hours_load
FOR EACH ROW
WHEN (new.ROW_ID IS NOT NULL)
    DECLARE

    BEGIN

    INSERT INTO xml_hours_load_2
    VALUES(:new.row_id, '2', '3', '5', '6', 'hi');
    END;

:新值是在表xml_hours_load

中修改的值