我想知道当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;
答案 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
);