学习触发器,并尝试执行基本任务,在我将一个插入语句执行到另一个名为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');
答案 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
中修改的值