最近的工作中遇到个问题:过程内写通过指定条件查询出值写到定义的变量里面 ,当没有查到时候会跑异常。
select t.bank_code
into v_bank_code
from sometable t where .......;
if v_bank_code is null or v_bank_code= '' then
dosomething A....;
else
dosomething B....;
end if;
exception
when others then
dosomethingC....;
本意是 查询赋值给 v_bank_code有值再执行 dosomethingB....;
如果 v_bank_code没查到 再执行dosomethingA....;
现实是
select t.bank_code
into v_bank_code
from sometable t where .......;
没有查到时候 select into v_bank_code 就抛异常,直接跑dosomethingC去了。
如果可能v_bank_code是没有值的,最好是
select t.bank_code
into v_bank_code
from sometable t where.......;
封成一个函数 这个函数里面有exception 去处理 为空时候处理给上值‘’。
因为即使在select 语句那 用上 decode 或者 nvl ,在into 时候还是抛异常。
而且先去查有没有select count(1)...,这样会多查一次,效率不好。
或者代码结构改一下不要if else 直接在若跑异常了 到dosomethingC 改去执行dosomething A....;但是要确定异常就是这个抛出的,代码逻辑复杂的、不好确定是哪个地方出异常的就不要这样,弄成函数会好一点。