This question提出了一個非常有趣的觀點; Oracle文檔中似乎存在一個矛盾,即%NOTFOUND
在提取後是否可能爲空。是嗎?獲取後可以%NOTFOUND返回null嗎?
注引用:在例6-16,如果FETCH從來沒有取出一行,那麼c1%NOTFOUND 始終是NULL和循環永遠不會退出。爲防止無限循環,請使用以下EXIT語句:EXIT當c1%NOTFOUND或 (c1%NOTFOUND IS NULL);
文檔似乎直接自相矛盾的,因爲它也說以下,這意味着,取後%NOTFOUND
不能爲空。
%NOTFOUND(佔發現邏輯對面)返回:在顯式遊標後
NULL被打開,但之前的第一次提取
FALSE如果最近從顯式遊標讀取返回的行
TRUE否則
的10g documentation也有類似的警告,因爲它警告說,可能會取不爲了成功執行這種行爲將要展出這不是必然,直接的矛盾。
第一次提取之前,%NOTFOUND的計算結果爲NULL。如果FETCH從不成功執行 ,EXIT WHEN條件永不爲TRUE,並且永不退出循環。爲了安全起見,您可能需要使用以下 EXIT語句:
退出時c1%NOTFOUND或c1%NOTFOUND爲NULL;
在什麼情況下可能會提取「失敗」或可能%NOTFOUND
在執行提取後返回null?
爲什麼會在那種情況下抓取永遠不會執行? – Ben
查詢可能存在問題,它在語法上有效,但由於其他因素而失敗。 –
問題的關鍵在於什麼是其他因素:-)?我無法想象代碼將通過獲取來評估'%notfound'但提取不會「有效」的單一方式。 – Ben