Oracle触发编译,但不进行更新

时间:2013-12-13 19:23:10

标签: database oracle triggers

我有这个触发器:

create or replace 
TRIGGER Trigger_X
before INSERT ON THING
FOR EACH ROW
DECLARE
  V_NEWTHING    VARCHAR2(20);
BEGIN
  NEW_THING('THING'||:old.CDTHING, V_NEWTHING);
  UPDATE THING 
  SET NUMBERTHING = V_NEWTHING
  WHERE :new.CDTHING = :old.CDTHING;
end;

但是这段代码不起作用 - 它在编译时没有显示错误,但它不会更新THING。

更多详细信息:在NEW_THING行,是存储过程。它返回一个V_NEWTHING,它基本上是一个插入THING的代码。但是这段代码根本没有运行,ORA会返回这个:

ORA-04092:无法在触发器中执行COMMIT ORA-06512:在“MYDATABASE.NEW_THING”,第33行 ORA-06512:在“MYDATABASE.Trigger_X”,第4行

我该如何解决这个问题?我对Oracle很新。

1 个答案:

答案 0 :(得分:1)

您有一个行级触发器,因此您不希望对DML表执行THING。只需指定:new.numberting

即可
new_thing( 'THING' || :old.cdthing, v_newthing );
:new.numberthing := v_newthing'

当然,假设您的UPDATE语句的目标是修改正在插入的行中的数据。如果cdthing不是主键,则会遇到更大的问题。