update TA set f1=f1+10 where f2=1;
如果没有记录不触发 exception.

解决方案 »

  1.   

    1.保证有记录
    2.有没有办法知道update了多少行?
      

  2.   

    对事物处理你应该没条语句进行一次EXCEPTION,
    如果你想测试,你可以单独在SQLPLUS使用update TA set f1=f1+10 where f2=1
    看下十分能进行得下去。
      

  3.   

    update TA set f1=f1+10 where f2=1;
    dbms_output.put_line(sql%rowcount);
      

  4.   

    有没有别的trigger操作这张表?
      

  5.   

    多加条件判断,如果有符合条件的就update,并输出文本信息。
      

  6.   

    to LGQDUCKY(飘) 
       单条的exception和多条一齐exception有什么分别,你意思是如果update那条出现例如
    表锁这样的错误的时候,最后的exception捕捉不到?
      

  7.   

    谢谢大家的帮助对不起,漏了说明一下,TB和TC是TA的从表,有外建约束。所以如果TB和TC能插入,UPDATE就一定有数据。我觉得主要问题是exception能否捕捉错误的问题。
      

  8.   

    declare
      cnt number(5);
    begin
       update TA set f1=f1+10 where f2=1;
       cnt :=sql%rowcount;
       if cnt = 0 then
          dbms_output.put_line("没有符合条件的记录!");
       end if;
       insert into TB VALUES(...);
       DELETE FROM TC WHERE ....;
       COMMIT;
    EXCEPTION
       WHEN OTHERS THEN 
           ROLLBACK;
    END;
      

  9.   

    update语句如果没有update成功的话,不会产生例外。
    因为会认为你更新了0行记录。
    不知道这个是不是触发器的部分程序?
      

  10.   

    对,update与delete作用类以,根本不用考虑存不存记录,它们是不会跳到例外事件.
    有个建义,可以每次事务完后,查看这个表v$transaction;看事务哪些没有提交
      

  11.   

    因为有外建约束,所以如果TB,TC能写入的话,TA就一定存在该记录TO beckhambobo(beckham) 
       commit;时,如果事务不能整个提交,是否会触发exception
      

  12.   

    还有个可能,dead lock
    你查查alert,如果发生dead lock在ALERT里会有记录的
    oracle对deadlock的处理:强制rollback事务,且不触发exception
      

  13.   

    楼上各位说得有理,如果更新了0条记录,也不算是Exception,自然就不会捕捉到了。