有这么一个问题,我写了一个oracle过程,过程中有几条sql语句,我怎样才能知道我过程中的sql语句都被成功执行了呢?
我使用过“语句影响行数”进行返回sql是否执行成功有点不妥,因我使用的数据是由别的表产生的,如果那表中没有所要的数据语句影响行数为0是正常的。
如使用inset into t1 select t2;
这样的情况,执行这条语句后由于t2没有数据t1也不会有所影响行数大于0的情况,但是这样的情况也是有可能的。我想知道只要这条语句没有执行出错就行了,我怎样获取这样的返回值呢?谢谢。

解决方案 »

  1.   

    用IF...ELSE...END IF来控制这条语句的执行条件
    BEGIN
     IF CONDITION THEN //设置一个flag, 若为真则执行以下SQL stament
    inset   into   t1   select   t2; //只要不违反约束条件就会执行
     ELSE
    RES := 'NG'; //条件不足于执行这个语句则返回一个error info. 
    END
      

  2.   

        存储过程增加处理异常。
      pl/sql程序块的异常部分包含了程序处理错误的代码,当异常被抛出时,一个异常陷阱就自动发生,程序控制离开执行部分转入异常部分,一旦程序进入异常部分就不能再回到同一块的执行部分。下面是异常部分的一般语法:
    exception
     when exception_name then 
      code for handing exception_name
     [when another_exception then
      code for handing another_exception]
     [when others then
      code for handing any other exception.]    懒人就简单一点处理:  ……
      BEGIN
        ……
        COMMIT;
      Exception When Others Then
        Rollback;
        DBMS_OUTPUT.PUT_LINE('错误信息为:'||sqlerrm);
      End;