declare
   sum_balance   int;
   cus_name      varchar2 (20);
   err exception;
begin
   cus_name:='&p_cus_name';
     select sum(balance)
       into sum_balance
       from account, depositor
      where customer_name = cus_name
            and account.account_number = depositor.account_number;
   if sum_balance < 400
   then
      dbms_output.put_line ('Bronze Customer');
   elsif sum_balance < 700
   then
      dbms_output.put_line ('Silver Customer');
   else
      dbms_output.put_line ('Golden Customer');
   end if;
exception
   when no_data_found
   then
      dbms_output.put_line ('No such customer');
end;第一次运行时能正常运行,但是随后随便我输入个什么名字,查询结果都是“Golden customer”,在没有添加异常处理代码前,输入不存在的用户时能正常报错,但是在加入异常处理代码并运行了几遍后再删掉异常处理代码,却又不报错了!请问是什么原因呀?

解决方案 »

  1.   

    首先lz用的异常处理从后面看明显是系统异常,所以没有必要定义异常变量,再次是cus_name:='&p_cus_name',这个我看不太懂,你这个是要用变量绑定还是什么,用变量绑定也不是这样写啊.
      

  2.   

    试了下,加不加Excepiton都是输出Golden Customer,楼主讲的报错信息是什么呢?
    DECLARE 
    v_totnum INT;
    BEGIN 
      SELECT Sum(1) INTO v_totnum FROM txdses41 WHERE 1=2;
      IF v_totnum<400 THEN 
        Dbms_Output.put_line('Bronze Customer');
      ELSIF v_totnum<700 THEN 
        Dbms_Output.put_line('Silver Customer');
      ELSE
        Dbms_Output.put_line('Golden Customer');
      END IF;
      
    --EXCEPTION WHEN No_Data_Found THEN 
      --Dbms_Output.put_line('No such customer');
    END;
      

  3.   

    我第一次运行的时候,没有加异常处理,弹出了个出错对话框,提示数据没找到之类的错误。再说为什么每次都是golden customer呢?
      

  4.   

    没数据的话,sum()会返回null,自然跑到最后一个else里面
      

  5.   

    你這裏的else  寫錯了 。。  應該是elsif!