ORACLE NO_DATA_FOUND的三种处理办法
时间:2016-06-14 02:08:01
收藏:0
阅读:630
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
评论(0)