当前位置: 代码迷 >> Oracle管理 >> PL/SQL程序块错误处理有关问题
  详细解决方案

PL/SQL程序块错误处理有关问题

热度:77   发布时间:2016-04-24 05:15:46.0
PL/SQL程序块异常处理问题
SQL code
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”,在没有添加异常处理代码前,输入不存在的用户时能正常报错,但是在加入异常处理代码并运行了几遍后再删掉异常处理代码,却又不报错了!请问是什么原因呀?

------解决方案--------------------
首先lz用的异常处理从后面看明显是系统异常,所以没有必要定义异常变量,再次是cus_name:='&p_cus_name',这个我看不太懂,你这个是要用变量绑定还是什么,用变量绑定也不是这样写啊.
------解决方案--------------------
试了下,加不加Excepiton都是输出Golden Customer,楼主讲的报错信息是什么呢?
SQL code
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;
------解决方案--------------------
没数据的话,sum()会返回null,自然跑到最后一个else里面
------解决方案--------------------
探讨
SQL code

declare
sum_balance int;
cus_name varchar2 (20);
err exception;
begin
cus_name:='&amp;p_cus_name';
select sum(balance)
into sum_balance
from account, d……