2014-04-14 60 views
1

我想知道如何我可以跳過一條記錄,而沒有得到任何數據發現錯誤時,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

一個解決方案是用異常處理程序將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記錄存在的記錄。

+0

我不能使用加盟怎麼我需要知道FUL結果誰擁有用戶一個a_number和誰沒有a_number加入將不會顯示完整的reslut,除了我使用完全加入,這將使我回到相同的點..並且我要求我試圖添加繼續關鍵字在異常部分,但它的作品只能用oracle 11g ..對嗎? – sam

+0

這個連接有什麼問題? 選擇我。* 從free_check˚F ,USER_INFO我 其中f.a_number = i.co_num – Rene

+0

如果a_number爲null,我永遠無法知道,使用時加入,如果我使用全加入讓這種情況下,生病得到回點在哪裏a_number是空的..我是吧? – sam

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 
); 
相關問題