如果它为null,如何跳过记录

时间:2014-04-14 05:47:09

标签: oracle oracle10g

我想知道当A_NUMBER为空值时,如何在没有找到数据的情况下跳过记录错误?

我发现继续关键词,但它不能在我的oracle 10g上工作,我尝试通过计算返回的记录数量,但这是没用的,这是我试着希望有更好的方法来做到这一点

declare
A_num_id varchar2 (25);
num1 number(4);
cursor nums_cur is select A_NUMBER from free_check;

begin 

for nums_rec in nums_cur loop
select count(*) into num1 from user_info where co_num=nums_rec.A_NUMBER;

select customer_id into A_num_id from user_info where co_num=nums_rec.A_NUMBER; 

DBMS_OUTPUT.PUT_LINE('A_num_id is '||A_num_id);

end loop;
end;

2 个答案:

答案 0 :(得分:0)

解决方案是将user_info查询包装在带有异常处理程序的plsql块中。

    begin
       select customer_id into A_num_id from user_info where co_num=nums_rec.A_NUMBER;
    exception
      when no_data_found then ...
    end;

但是如果循环选择太多记录,则性能不是最佳的。最好的方法是更改​​free_check游标并将user_info加入查询。这样,光标将只选择存在user_info记录的记录。

答案 1 :(得分:0)

另一种方法是修改光标并仅选择A_NUMBER个值,其中包含user_info个数据,如下所示:

cursor nums_cur is 
select A_NUMBER from free_check fc
where exists
(
select 1
from user_info ui
where ui.co_num = fc.A_NUMBER
);