2016-09-28 70 views
0

我正在編寫一個單獨處理表行的PL/SQL函數。我通過它一個關鍵。檢查該行是否已經被處理的最快方法是什麼?如果忽略它,是什麼?這可能聽起來很愚蠢,但請假設它總是試圖處理表中的所有行(主要是因爲它也做了其他事情)。「忽略」一行的最快方法

我的一個解決方案是在該表上創建一個標誌列(我能想到的最快),另一個是將一條記錄插入另一個表並檢查該行是否不在該表中(可能較慢)。

+0

應該做的功能是什麼?您應該根據列指定一個訂單。因爲發佈的問題太廣泛了。你可能實際上不需要PL/SQL來做到這一點。張貼一些樣本數據和預期結果。 –

+0

@vkp更新了我的問題。 – Mocking

+1

如果你關心速度,那麼找一種方法來消除使用光標。您的處理不建議需要遊標。 –

回答

0

假設您需要使用PL/SQL函數,您應該只傳遞它需要處理的行集。這意味着使用普通SQL從您需要的表中選擇行並將其傳遞給函數。無論如何,只要你最終必須在數據庫環境中使用遊標,你應該仔細查看你正在做什麼,因爲這不是真正針對數據庫優化的。

+1

這是一種與你的答案開頭的矛盾:_「當你最終不得不在數據庫環境中使用遊標時,仔細查看你正在做什麼,因爲這不是真正針對數據庫進行優化的_ 。在PL/SQL中,所有選擇語句都是遊標(隱式或顯式),因此使用遊標是PL/SQL中處理的基本和最佳方式。 – user272735

+0

我的意思是使用pl/sql而不是普通的sql通常不是必需的。我的意思是要小心使用遊標逐行遍歷結果集。 –

+0

我們不允許在生產實例中執行'regular'sql,只能執行程序和函數。 – Mocking