今天发现,如果 vsql0 这个动态SQL如果返回值为null时候 ,执行execute immediate vsql0 into vsum 就跑出异常,vsum变量定义为:number(8,2);感觉就是vsum不能把null值放进去,我该如何处理这个问题,确实执行vsql0有可能返回null值,哪位英雄指点一下。

解决方案 »

  1.   

    先判斷vsql0這個語句返回的是否是null,若是則不執行,若不是則執行
      

  2.   

    用dual表作为右连接,如下,没记录,但不会有错,还可以用异常处理,方法很多的,用久了就清楚了declare 
    v_t int;
    v_sql varchar2(200);
    begin
    v_sql := 'select empno from emp
    right join dual on empno=1111';
    execute immediate v_sql into v_t;
    dbms_output.put_line(v_t); 
    end;
    /
      

  3.   

    vsql0  是什么样子的语句?对该语句进行处理,保证不返回NULL即可