这种判断好像有问题:  if in_sum_amount is null then
    in_sum_amount := 0;
  end if;
如果:
  select sum(amount)
    into in_sum_amount
    from inbill
   where inDate > d_lateaidDate
     and barCode = v_Inputbarcode
     and warehouseID = v_InputwarehouseID;
返回值没有的话,in_sum_amount根本不可能得到包括null的所有值,所以建议更改:
判断返回记录条数>0,之后再追加这个这个判断试试!

解决方案 »

  1.   

    en 如果纪录为空就不能into,但是我不知道怎么判断某条记录是否存在,刚刚开始oracle,楼上能不能写出具体的判断语句呢?就是判断某条记录是否存在的oracle语句
      

  2.   

    select nvl(amount,0)
        into sum_amount
        from Finishstock
       where aidDate = d_lateaidDate
         and warehouseID = v_InputwarehouseID
         and barCode = v_Inputbarcode;
    加个nvl函数判定,就轻松多了。
      

  3.   

    楼上那只是判断如果amount为空就变为0,但是如果纪录不存在就会出错误,最终还是要判断记录是否存在才行
      

  4.   

    你可以把变量先赋值为NULL
      

  5.   

    变量赋值为空,如果符合条件的记录不存在,照样会发生异常,其实用异常可以解决,我想知道还有没有别的方法
    v_bool boolean :=true;
    begin
    begin
    select sum(amount)
        into in_sum_amount
        from inbill
       where inDate > d_lateaidDate
         and barCode = v_Inputbarcode
         and warehouseID = v_InputwarehouseID;
    exception
    when no_data_found then
    v_bool:=false;
    end;if v_bool=false then
    in_sum_amount :=0;
    end if;
    end;
    我知道这样可以,但是我想找个更好的方法 高手赐教
      

  6.   

    --如果表中没有数据,sum()结果会是null,不会引发no_data_found异常
    declare
    in_sum_amount number;begin
    select sum(account_no)
        into in_sum_amount
        from b_accounts where account_no<0; if in_sum_amount is null then 
       in_sum_amount:=0;
    end if;
    dbms_output.put_line(to_char(in_sum_amount) || 'aaa');
    /*
    exception
    when no_data_found then
    in_sum_amount:=0;
    dbms_output.put_line(to_char(in_sum_amount) || 'no_date');
    */
    end;
      

  7.   

    select amount
        into sum_amount
        from Finishstock
       where aidDate = d_lateaidDate
         and warehouseID = v_InputwarehouseID
         and barCode = v_Inputbarcode;
    --这个句子。如果没有结果会引发no_data_found 异常 ,加个异常处理就好了
      

  8.   

    --如果表中没有数据,sum()结果会是null,不会引发no_data_found异常
    declare
    in_sum_amount number;begin
    select sum(account_no)
        into in_sum_amount
        from b_accounts where account_no<0;if in_sum_amount is null then 
       in_sum_amount:=0;
    end if;
    dbms_output.put_line(to_char(in_sum_amount) || 'aaa');
    /*
    exception
    when no_data_found then
    in_sum_amount:=0;
    dbms_output.put_line(to_char(in_sum_amount) || 'no_date');
    */
    end;
    楼上这个为什么如果没有记录不会引发异常呢?而
    select amount
        into sum_amount
        from Finishstock
       where aidDate = d_lateaidDate
         and warehouseID = v_InputwarehouseID
         and barCode = v_Inputbarcode;
    这个会引发异常?望指教?还有如果不用异常处理 用sql%rowcount可不可以?
      

  9.   

    我的理解是如果查询某记录,如果符合条件的记录不存在,如果用了into则都会引发异常的阿
      

  10.   

    --下面两个句子是不一样的,一个是求和(sum),求和的时候没有记录结果就是null
    你也可以自己测试阿select sum(account_no)
        into in_sum_amount
        from b_accounts where account_no<0;
    select amount
        into sum_amount
        from Finishstock
       where aidDate = d_lateaidDate
         and warehouseID = v_InputwarehouseID  --没有记录的时候已经会引发异常,应该是必须处理的吧
         and barCode = v_Inputbarcode;
      

  11.   

    加了sum,max,min等函数都不会引发异常