- 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里面
------解决方案--------------------