Oracle存储过程中EXECUTE IMMEDIATE 执行结果是空时怎么继续执行?
EXECUTE IMMEDIATE P_SQL_QUERY INTO P_NUM;
P_SQL_QUERY里边是select count(1) from t 
p_num 定义的是number类型,现在存储过程执行报错,因为P_SQL_QUERY执行的结果是null,现在不知道怎么处理了,其实我只想要P_SQL_QUERY的结果不是空的那些,但是由于有空的,导致报错不能继续执行,请大神指点!!!

解决方案 »

  1.   

    count没有数据也是0,你后面有having吧
      

  2.   

    P_SQL_QUERY里面有group by吗,如果有的话且字段有空值的话会是null。建议先在where后面先把null过滤掉
      

  3.   

    没有having,就是判断表里有没有数据,然后放入变量,进行后续的操作,现在是如果表里没有数据到这里就报错EXECUTE IMMEDIATE P_SQL_QUERY INTO P_NUM;
      

  4.   

    没有group不用,只有一个count(1)查询数据库里每个表是否有数据
      

  5.   

    动态SQL既然无论如何不能为空,那么代码多一步判断,如果为空,将P_SQL_QUERY赋值为一个无意义的可执行SQL,后续针对这种情况下的p_num也多个判断即可。
      

  6.   

    2个方案:
    1、用NVL,将NULL,处理成您需要的值。
    2、增加异常处理,保证那段代码即使出了问题,也可以继续执行下去,不要让它断掉。