1. 存储过程中 ORA-01403: no data found 错误
在存储过程中,select 字段名 into 变量 from 表名 where .........;
如果查询出来为空时, 会出现 ORA-01403: no data found 的错误
command window:
declare
v_cnt number(10);
begin
select id into v_cnt from tt where 1=2;
end;
/
错误:
2. 解決办法:
造成错误的原因主要是数据库中没有对应的数据。而当直接使用该查询语句时,是不会报错的,返回0记录。
2.1. 对查询字段使用聚合函数
command window:
declare
v_cnt number(10);
begin
select max(id) into v_cnt from tt where 1=2;
end;
select count(*) field into var from table where ....
增加一个count(*)即使没有找到数据,也会返回0,而不是null。
增加一个min或count(*)函数。这主要是因为聚合函数没有找到数据时,会返回0,而不是null。
这些主要是聚合类型的函数,如sum,count,max,min等。其的函数则不行,如to_char,substr.
另外,如使用nvl,即
select nvl(t_id,1) into v_id from test_table where rownum = 1;
是没效果的,还是会报异常。nvl只对null值处理,而select t_id into v_id from table是返回空记录。
2.2:捕获异常,用exception when no_data_found then 处理一下。
declare
v_cnt number(10);
begin
select id into v_cnt from tt where 1=2;
exception when no_data_found then
raise_application_error(-20012,'error');
--dbms_output.put_line('error1');
end;
/