如何在Trigger中调用无参数存储过程

时间:2018-02-04 05:08:10

标签: oracle database-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函数,在中引用)              这句话)试图查看(或修改)一个表              在被解雇它的声明修改的过程中。   *动作:重写触发器(或函数),使其不读取该表。

任何人都可以帮我这个吗?谢谢,

1 个答案:

答案 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