问大家个oracle 存储过程的事情  我在一个存储过程里  
写了这样一条语句
update vehicle_main set tolltodate=v_NewTime where vehicleid=v_vehicleid;
       if sql%notfound then
          raise exception_cannotExec;
       end if;
       .....
commit;
    EXCEPTION
    WHEN OTHERS THEN
    BEGIN
         INTRESULT:=0;
         ROLLBACK;
    END;v_NewTime(date)  和v_vehicleid (int) 都是变量
exception_cannotExec;  自定义异常
执行的时候这两个值都是正确的
但是  有的时候看结果这个语句就是没有执行。。
也不报异常
下面的语句都执行成功了 
但重新执行一边又好了。

解决方案 »

  1.   

    但是  有的时候看结果这个语句就是没有执行。。
    也不报异常    EXCEPTION
        WHEN OTHERS THEN
        BEGIN
             INTRESULT:=0;
             ROLLBACK;
    lz
    你的最外层的异常处理是rollback啊,而且不提示。所以:
    就是你看到的情况拉
      

  2.   

    EXCEPTION
        WHEN OTHERS THEN
        BEGIN
             INTRESULT:=0;
             ROLLBACK;
             dbms_output.put_line('遇到未知错误!!');
        END;
      

  3.   

    这个 我也用过。 不过他不会走到这一步不会走到 Exception  因为在前边没有抛出过异常
      

  4.   

    DECLARE aa INT;
    exc_1 EXCEPTION;
    BEGIN
      aa:=1;
      IF aa=1 THEN
        RAISE exc_1;
      END IF;
      aa:=2;
      IF aa=1 THEN
        RAISE exc_1;
      END IF;
      COMMIT;
    EXCEPTION 
      WHEN   exc_1 THEN
      DBMS_OUTPUT.PUT_LINE('1');
      
      WHEN OTHERS THEN 
        DBMS_OUTPUT.PUT_LINE('other');
    ROLLBACK;
    END;--
    结果
    1
      

  5.   

    dk9761(King) ( ) 信誉:100    Blog  2007-01-17 12:06:01  得分: 0  
     
     
       这个 我也用过。 不过他不会走到这一步不会走到 Exception  因为在前边没有抛出过异常
      
     
    --
    是否是别的地方的问题啊
      

  6.   

    --lz好好检查一下吧DECLARE aa INT;
    exc_1 EXCEPTION;
    BEGIN
      aa:=1;
      IF aa=1 THEN
        RAISE exc_1;
      END IF;
      aa:=2;
      IF aa=1 THEN
        RAISE exc_1;
      END IF;
      COMMIT;
    EXCEPTION 
      WHEN   exc_1 THEN
      DBMS_OUTPUT.PUT_LINE('1');
      aa:=2;
      DBMS_OUTPUT.PUT_LINE(aa);
      ROLLBACK;
      WHEN OTHERS THEN 
        DBMS_OUTPUT.PUT_LINE('other');
    ROLLBACK;
    END;--
    结果
    1
    2
      

  7.   

    如果update可以取到记录,但set值是空时,是不会报错的,空值也会被认为正确赋值,除非表有约束,不允许set字段为空,这时也就会报错.
      

  8.   

    更新的表应该没有问题.如果表vehicle_main中where vehicleid=v_vehicleid至少能查出一条记录来,后面的异常都不会发生,所以exception对update操作基本没用.最好在update之前对所要取的值进行判断,如果不符合条件,就回滚或返回.当然第一个异常还是有用的.