改成以下代码试一试:
CREATE OR REPLACE TRIGGER up_conflag
BEFORE UPDATE OF excute_num ON sales_control_bill
FOR EACH ROW
DECLARE
  PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
   if :new.excute_num  >= :old.turn_num then    
     :new.excute_flag = 'C'    //或SELECT 'C' INTO :new.excute_flag  FROM DUAL;
   end if;      
end;

解决方案 »

  1.   

    补充一下:
    如果想在触发器中修改数据,最好设计成自治的事务:
    DECLARE的第一行加上: PRAGMA AUTONOMOUS_TRANSACTION;
    在最后COMMIT;
      

  2.   

    have a try:
    CREATE OR REPLACE TRIGGER up_conflag
    after UPDATE OF excute_num ON sales_control_bill
    FOR EACH ROW
    BEGIN
       if :old.excute_num  >= :old.turn_num then    
         update sales_control_bill
         set excute_flag = 'C'
         where cortrolbill_no = :old.cortrolbill_no;         
       end if;      
    end;
      

  3.   

    要想修改触发表的数据,可以在before型的触发器中以:new=values的形式,以update 基表 set .....的形式会产生错误。因为DML触发器不能读变化表的数据。变化表包括与触发器发生连接的表 读,包括select insert delete update 
    我测试过了,但不知道有没有普遍性!
      

  4.   

    CREATE OR REPLACE TRIGGER up_conflag
    BEFORE UPDATE OF excute_num ON sales_control_bill
    FOR EACH ROWBEGIN
       if :new.excute_num  >= :old.turn_num then    
         :new.excute_flag: = 'C';    //或SELECT 'C' INTO :new.excute_flag  FROM DUAL;
       end if;      
    end;