2013-10-23 31 views
-3

通過使用批量收集功能,當您試圖循環遍歷結果時,如何檢測未返回結果以防止發生異常的查詢?通過PL/SQL批量收集

+3

你能不能只檢查是否你收集的'COUNT'收集'結果爲零? –

回答

0

您可以使用此代碼:

open rc for select descr from hardware; 
loop 
    fetch rc bulk collect into l_rows limit l_fetch_sizes(i); 
    exit when rc%notfound; 
end loop; 
close rc; 

退出當敲定

爲了趕上例外批量收集DML操作你可能在你SQL%BULK_EXCEPTIONS

BEGIN 
    -- DML operations 
EXCEPTION 
    WHEN operation_erros THEN 
    l_error := SQL%BULK_EXCEPTIONS.count; 
    FOR ind IN 1 .. l_error LOOP 
     DBMS_OUTPUT.put_line('Error: ' || ind || ' Array Index: ' || SQL%BULK_EXCEPTIONS(ind).ERROR_INDEX || ' Message: ' || SQLERRM(-SQL%BULK_EXCEPTIONS(ind).ERROR_CODE)); 
    END LOOP; 
END; 
+0

批量收集不會引發NO_DATA_FOUND異常。 (我試圖編輯答案,但我不斷收到錯誤。服務器不喜歡這個答案或我的編輯,出於某種原因。) –

+2

我不明白你爲什麼在這裏使用'SQL%BULK_EXCEPTIONS'。 'SQL%BULK_EXCEPTIONS'僅用於使用'FORALL'的大批量DML操作([source](http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID: 349582300346524740))。 「BULK COLLECT」期間拋出的異常通常會拋出。你的第二個代碼段是誤導性的。 –

+0

你是對的!我編輯我的答案。 – randiel