我正在尝试从触发器
调用存储过程create or replace trigger trg_insert
after insert on dbuser_m1
for each row
begin
InsertData;
end;
但是低于错误
ORA-04088:执行触发期间出错 ' OWS_GO_UAT_02.TRG_INSERT' 04091. 00000 - "表%s。%s正在变异,触发/功能可能看不到它" *原因:触发器(或用户定义的plsql函数,在中引用) 这句话)试图查看(或修改)一个表 在被解雇它的声明修改的过程中。 *动作:重写触发器(或函数),使其不读取该表。
任何人都可以帮我这个吗?谢谢,
答案 0 :(得分:1)
除了@KaushikNayak所说的,似乎你在表select
中有一个dbuser_m1
,而它正由DML(在这种情况下为insert
)处理。
我们不知道InsertData
,
但我想,
而不是使用这样的陈述select col1, col2 into v_col1, v_col2 from dbuser_m1;
,
您可以在调用时将一些带有dbuser_m1
列参数的参数应用到InsertData(:old.col1,:old.col2)
这样的过程,在调用过程中可能会有分配:
v_col1 := :old.col1; v_col2 := :old.col2;
其中v_col1
的类型为dbuser_m1.col1%type
,而v_col2
的类型为dbuser_m1.col2%type
。