当前位置:首页 > 数据库 > Oracle

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


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐