日期:2014-05-17  浏览次数:20711 次

oracle触发器的问题
我有一个存储过程功能是传入一个编号修改此表(TAB1)中的状态.
TAB1有一个触发器,在执行INSERT时触发器调用这个存储过程同时传入NEW.ID

TAB1
ID,STATE
1,2
2,3
-------------触发器------------------------------------
create or replace trigger TEST_TAB1
  after INSERT ON TAB1
  FOR EACH ROW
declare  
  PRAGMA AUTONOMOUS_TRANSACTION;
  begin  
  begin  
  prc_TEST(:NEW.ID);
  commit;
  end;
  end TAB1;
--------------------------存储过程--------------------------
CREATE OR REPLACE PROCEDURE prc_TEST(ls_id IN VARCHAR2) is  
  begin  
  update TAB1 set state=9 where id=ls_id;
  end prc_TEST;

但执行了STATE的值没改变是怎么会事呀
我想实现插入时修改其实状态值要用这种方法实现行吗?

------解决方案--------------------
create or replace trigger trig_test 
after insert on tab1
for each row
begin
 -- prc_test(:new.id);
update tab1 set state = 9 where id = :new.id;
commit;
end;

要将更新语句放在触发器里执行;
在触发器被触发时,该条记录还是被锁定或者对其他事务不可见的。