通過使用批量收集功能,當您試圖循環遍歷結果時,如何檢測未返回結果以防止發生異常的查詢?通過PL/SQL批量收集
回答
您可以使用此代碼:
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;
批量收集不會引發NO_DATA_FOUND異常。 (我試圖編輯答案,但我不斷收到錯誤。服務器不喜歡這個答案或我的編輯,出於某種原因。) –
我不明白你爲什麼在這裏使用'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」期間拋出的異常通常會拋出。你的第二個代碼段是誤導性的。 –
你是對的!我編輯我的答案。 – randiel
從文檔的一個例子:
http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/tuning.htm#BABCCJCB
OPEN c1;
LOOP
FETCH c1 BULK COLLECT INTO names, sals LIMIT v_limit;
EXIT WHEN names.COUNT = 0;
print_results();
END LOOP;
CLOSE c1;
- 1. 使用批量收集的PLSQL集合
- 2. PLSQL通過1-N表的連接批量收集到UDT中?
- 3. PLSQL - 批量收集的最大限制?
- 4. 關於PLSQL批量收集和嵌套表
- 5. 批量收集和ForAll - Oracle
- 6. Lodash收集批量更新
- 7. 批量收集動態sql
- 8. 在oracle中批量收集
- 9. LISTAGG功能與PLSQL收集
- 10. 收集通過流
- 11. 通過MXBean收集
- 12. 到達變量通過PLSQL連接
- 13. 如何通過PLSQL
- 14. 批量收集到對象表中
- 15. SQL批量收集和計數
- 16. oracle批量收集和讀取數據
- 17. PostgreSQL相當於Oracle的「批量收集」
- 18. 批量收集到在for循環
- 19. 使用「for update」進行批量收集
- 20. 立即執行批量收集限制
- 21. 過量垃圾收集?
- 22. 通過jquery循環收集
- 23. laravel GROUPBY通過收集
- 24. Rails:通過關聯收集?
- 25. 錯誤通過收集
- 26. 通過窗體屏幕屏蔽plsql批處理
- 27. 刪除通過批量
- 28. 我想通過批量
- 29. 無法通過批量
- 30. 如何通過批量
你能不能只檢查是否你收集的'COUNT'收集'結果爲零? –