sum()后,如果没有记录则为0的,当然,%found都是ture了
改变你的判断条件。

解决方案 »

  1.   

    那应该这么写?
      我debug了, 如果没查到,real_emp的值为null,可是我判断
       if real_emp=null then
          real_emp:=0;
       end if;
    也不行呀?
      

  2.   

    我不是说了吗,如果没有记录的话也是0,你写
    if real_emp=null then
      //这里的语句不会执行的,而且也是多余的。
    end if;
    你不如直接写:
        select sum(RESH_QTY) into real_emp from real_shipping where RESH_MONTH between  shipping_smonth and shipping_emonth;
    你的那个游标也是多余的。
      

  3.   

    jiezhi(西域浪子) 不要相当然以为,自己去试试,看看real_emp 会不会等于0,
    根本就不会有显示,只有查到了纪录才会显示出sum的值,没查到什么都不会显示!
    real_emp根本就是空值BEGIN
     DECLARE
     real_emp  NUMBER;
     
       BEGIN
      select SUM(SAFO_QTY) into real_emp from sales_forecast  
    where SAFO_MONTH='200302' and SAFO_BUVE_CODE='PCK20030304'; DBMS_OUTPUT.PUT_LINE(real_emp);
       END;
    END;
      

  4.   


    if real_emp is null then
       real_emp:=0;
    end if;TO:lile_zhy(阿郎)
    别人帮你解决问题,不敢怎么样,还是礼貌一点把
      

  5.   

    lile_zhy(阿郎) 说的没有错,没有数据时,就是空,并且该项数据全部为空时,也是空,所以
    可以这么写
    select decode(SUM(SAFO_QTY),null,0,SUM(SAFO_QTY)) into real_emp from sales_forecast  
    where SAFO_MONTH='200302' and SAFO_BUVE_CODE='PCK20030304';
      

  6.   

    没有别的意思,只是就是论事, 
     w_tsinghua() 的方法可以,我还有另外一个方法
     
    select NVL(SUM(SAFO_QTY),0 ) into tt from sales_forecast  
    where SAFO_MONTH='200302' and SAFO_BUVE_CODE='PCK20030304';
    同样可以实现,我总结了几种方法1. select NVL(SUM(SAFO_QTY),0 ) into tt from sales_forecast  
    where SAFO_MONTH='200302' and SAFO_BUVE_CODE='PCK20030304';
       根本不用判断,有就有,没有就是02.有GROUP BY 或纯粹的SELECT 时可以用%NOTFOUND 去判断
    open reality_shipping;
         fetch reality_shipping into real_emp;
            if reality_shipping%notfound then
            real_emp:=0;    
            end if;
        close reality_shipping; 
      

  7.   

    你把游标里面的sum(RESH_QTY)改成:
         Nvl(sum(RESH_QTY),0)
      这样应该可以搞定的。