create or replace procedure pro_error_data
is
d_sql varchar(100);
d_name varchar(100);
d_count number;
begin
for rs in(select name from testa where id= '1') loop
d_sql:='select name from testb where name ='''||rs.name||'''';
execute immediate d_sql into d_name ;
end loop;
exception
when others then
dbms_output.put_line('sqlcode:'||sqlerrm);
rollback;
end;
问题分析:
看似该存储过程没有其他的问题,其实存在很大的问题, 当查不到数据时,且把查询的结果注入到定义的变量中,导致中断了存储过程,忽略这个问题。
解决方法 判断查询的值存在不,如果存在,将结果注入到变量中
select count(*) into d_count from testb where name=''||rs.name||'';
if d_count >0 then
d_sql:='select name from testb where name ='''||rs.name||'''';
execute immediate d_sql into d_name ;
end if;