繁体   English   中英

如何在触发器内部调用无参数存储过程

[英]How to call no argument stored procedure inside Trigger

我正在尝试从触发器调用存储过程

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函数在此语句中引用的语句)试图查看(或修改)一个表,该表正被触发它的语句修改。 *操作:重写触发器(或函数),使其不读取该表。

有人可以帮我吗?谢谢,

除了@KaushikNayak告诉的内容外,似乎您正在从表dbuser_m1进行select ,而该表正在由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%typev_col2的类型为dbuser_m1.col2%type

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM