日期:2014-05-17  浏览次数:21131 次

查询不到数据时设一个默认值
存储过程里要查询某个销售订单的发货日期,按照销售订单查询,如果差不到数据的话就默认为空

在一个游标循环中
select c_billdate
   into varsenddate
from APLIUSER.TXD_SDLIST
where c_saleitem||c_saleid = csr.c_sditemid
and rownum<2;

执行到这里就会报错ORA-01403: 未找到任何数据

请问应该如何解决?

------解决方案--------------------
是的,使用select。。。into时,如果没有找到数据或者找到多条数据都会出现异常!

通常的情况:

......
begin
  select c_billdate
    into varsenddate
    from APLIUSER.TXD_SDLIST
      where c_saleitem
------解决方案--------------------
c_saleid = csr.c_sditemid
            and rownum<2;
exception
  when others then
    varsenddate := sysdate-10; --这里设置默认值
end;
......
------解决方案--------------------
我记得实在查询前给变量varsenddate先付个初始值,你那样select。。。into没查到数据就赋值会报错
------解决方案--------------------
引用:
因为要查询出数据并放到varsenddate这个变量中去,如果一行数据也没有查到,就会报错的。


begin
varsenddate:='默认值';
  select c_billdate
    into varsenddate
    from APLIUSER.TXD_SDLIST
      where c_saleitem
------解决方案--------------------
c_saleid = csr.c_sditemid
            and rownum<2;
......