oracle when nodatafound then,ORACLE NO_DATA_FOUND的三种处理办法

Oracle中存储过程中,如果需要将表中的值赋给变量,一般采取这样的方式

SELECT col

INTO v_col

FROM t_table

WHERE condition

?如果找不到数据,就会有 数据找不到的异常

?

?

有三种方式解决

1. 普通的异常捕获的方式

2. 通过表关联left join的方式

3. 通过max的方式

?

方法1 语法:

?

BEGIN

SELECT col

INTO v_col

FROM t_table

WHERE condition

EXCEPTION WHEN NO_DATA_FOUND THEN

do something

END;

?

方法2 语法:

?

?

select nvl(b.col,自定义的默认值) into v_col

from (select 1 rn from dual) a

left join (

SELECT col,rownum rn

FROM t_table

WHERE condition

) b on a.rn=b.rn

?

?

方法3 语法:

?

SELECT max(col) INTO v_col

FROM t_table

WHERE condition

?

初始化数据

?

?

create table test_sj_salary

(

id integer primary key,

name varchar2(100),

salary integer

);

truncate table test_sj_salary;

insert into test_sj_salary (ID, NAME, SALARY)

values (1, ‘张三‘, 5000);

commit;

?

三种方法的演示

?

declare

v_salary integer;

begin

--通过异常方式处理找不到数据

begin

select tss.salary into v_salary

from test_sj_salary tss

where tss.name=‘蒙牛‘;

EXCEPTION WHEN NO_DATA_FOUND THEN

v_salary := -1;

end;

dbms_output.put_line(‘Exception deal ‘||to_char(v_salary));

--通过表关联的方式实现

select nvl(b.salary,-2) into v_salary

from (select 1 rn from dual) a

left join (

select tss.salary,rownum rn

from test_sj_salary tss

where tss.name=‘伊利‘

) b on a.rn=b.rn;

dbms_output.put_line(‘Table deal ‘||to_char(v_salary));

--通过max方式处理

select max(tss.salary) into v_salary

from test_sj_salary tss

where tss.name=‘光明‘;

dbms_output.put_line(‘Max deal ‘||to_char(v_salary));

end;

?

笔者在日常使用中常用的为方法二。

?

?

?

?

原文:http://wodeguozili.iteye.com/blog/2304210

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值