在insert事件时触发操作,操作中能不能改变正在的insert的那行的值?触发器代码如下
create TRIGGER UT_ERP_INSERT
 BEFORE INSERT ON ERP
 FOR EACH ROW
  WHEN (NEW.flag_read='0')
DECLARE
   prop_count number; --记录table_execute中已经存在的本task_id的记录数
   sys_date date;     --保存服务器系统的当前时间,在插入数据的时候用
BEGIN
SELECT count(*) into prop_count from table_execute where table_execute.TASK_ID=:new.TASK_ID;
if (prop_count=0) then --没查到记录,则执行插入
   select current_date into sys_date from dual;      --获取系统当前时间
   insert into TABLE_EXECUTE(FLAG_TASK, TASK_ID, CARGO_NO,TABLE_EXECUTE.TYPE, CARGO_NAME, LOCATION_NO, LOCATION_GRID_NO, NUM_CARGO, DATETIME_INCOME, FLAG_INCOME, GROUP_NO, FLAG_READ, ADDITION, DATETIME_FEEDBACK, DUTY_PERSON, DUTY_UNIT, PART_NO, PRI_LEVEL,FACT_NUM_CARGO,FLAG_WAREHOUSE,FLAG_COMMIT,PERSON_OPERATE,DATETIME_OPERATE,OPERATE)
          values('1',:new.TASK_ID,:new.CARGO_NO,:new.TYPE,:new.CARGO_NAME,:new.LOCATION_NO,:new.LOCATION_GRID_NO,:new.NUM_CARGO,:new.DATETIME_INCOME,:new.FLAG_INCOME,:new.GROUP_NO,:new.FLAG_READ,:new.ADDITION,:new.DATETIME_FEEDBACK,:new.DUTY_PERSON,:new.DUTY_UNIT,:new.PART_NO,:new.PRI_LEVEL,0,'0','0','触发器',sys_date,'插入');
end if;

:new.flag_read:='1';           --把正在插入的行的flag_read值置为‘1’,

END UT_ERP_INSERT;在上面倒数第二行:new.flag_read:='1';   不起作用,触发完之后flag_read还是0,有什么办法可以实现么?各位大侠帮忙啊

解决方案 »

  1.   

    楼上,试了,不起作用。
    而且数据库里面flag_read字段是char(1)
      

  2.   

    :new.flag_read:='1';           --把正在插入的行的flag_read值置为‘1’,楼主要干吗?为什么要修改:new.flag_read??就算改了也没用。
    INSERT时改1不行吗?
      

  3.   

    因为falg_read='0'的时候触发,如果触发成功,要把flag_read置为'1',让其他程序知道这个任务已经被领走了.
    这是业务逻辑的控制要求
      

  4.   

    那你也不是修改;new的值啊,而是update tab set flag_read = 1。
      

  5.   

    update tab set flag_read = 1 只会对除新插入行外的其他行有用,我试过,其他的行都可以update就新行不可以,我觉得是不是update的时候插入的事务没有提交,怎么样才能让update也对新行有效呢?
      

  6.   

    try:before update 
    update tab set flag_read = 1
      

  7.   

    Eric_1999(╙@^@╜):这样不就产生变化表问题了么。
    update的同时update,无止境的啊。