begin 
sql1;
sql2;
sql3;exception 
when others then 
rollback;
end
这是一种存储过程捕获异常的方法,
第一个问题:我想请教下 还有没有其他的方法捕获异常。
第二个问题:如果采用上面的方法,如果SQL1语句执行就出现问题,是直接跳到EXCEPTION里面捕获异常然后回转呢 还是需要执行完SQL2与SQL3语句之后 然后执行EXCEPTION 不明白这种捕获异常机制是什么样的

解决方案 »

  1.   

    第二問題,sql1出錯就直接跳到exception,不會執行SQL2, SQL3
    除非,你寫成這樣
    begin
      begin
       sql1;
      exception
      end;  begin
       sql2;
      exception
      end;  begin
       sql3;
      exception
      end;
    end;
      

  2.   

    如果存在这样的 
    begin  
    sql1;
    sql2;
    sql3;
      while i<100 
      loop 
      sql4;
      sql5;
      sql6;
      end loop;
    exception  
    when others then  
    rollback;
    如果第SQL4条语句出现问题 我上面的这种写法 能把整个存储过程ROLLBACK了不 他还继续执行SQL5与sql6 语句不 
      

  3.   

    我的意思是已经循环了几次了 SQL4出现问题了 
      

  4.   

    不管你循環幾次,只要沒有提交(commit顯式提交和ddl語句的隱式提交),就可以rollback。
      

  5.   

    谢谢你的回答 你的意思是不是begin  
    sql1;
    sql2;
    sql3;
    commit;
    exception  
    when others then  
    rollback;
    end
    这样的话 只要COMMIT就是修改数据库了 ROLLBACK就没什么意义了
      

  6.   

    ddl語句的隱式提交 是什么意思 
    是不是 INSERT INTO 
          UPDATE  TABLE SET 语句
      

  7.   

    DDL就是create table等等
    insert, update, delete是DML