我在某處讀到99%的時間你不需要使用遊標。存儲過程:光標不好?
但我想不出在這種情況下使用遊標的其他方式。
Select t.flag
From Dual t;
比方說,這回4行要麼'Y'
或'N'
的。如果發現'Y'
,我希望程序觸發某些內容。我通常會聲明一個遊標並循環,直到%NOTFOUND
。請告訴我,如果有更好的方法。
此外,如果您有任何想法,什麼時候使用光標的最佳時機?
編輯:除了插入標誌的,如果我想要做什麼「如果'Y'
然後觸發一些」?
我在某處讀到99%的時間你不需要使用遊標。存儲過程:光標不好?
但我想不出在這種情況下使用遊標的其他方式。
Select t.flag
From Dual t;
比方說,這回4行要麼'Y'
或'N'
的。如果發現'Y'
,我希望程序觸發某些內容。我通常會聲明一個遊標並循環,直到%NOTFOUND
。請告訴我,如果有更好的方法。
此外,如果您有任何想法,什麼時候使用光標的最佳時機?
編輯:除了插入標誌的,如果我想要做什麼「如果'Y'
然後觸發一些」?
您的情況絕對屬於99%。
您可以使用insert into ... select...
輕鬆完成條件插入。這只是一個問題或使select
返回你想要插入的結果。
如果要爲每個'Y'
插入一條記錄,請使用帶有where flag = 'Y'
的查詢。如果您只想插入單個記錄,具體取決於是否至少有一個'Y'
,則可以將distinct
添加到查詢中。
當你做出更復雜的事情時,光標很有用。例如,我需要在需要插入或更新一個表中的記錄時使用遊標,並且還爲每個記錄插入或更新一個或多個記錄到其他幾個表中。
很好的例子犯規頗有道理..
但你總是可以寫一個insert as select
語句而不是什麼我想你所描述
事情是這樣的:
INSERT INTO TBL_FLAG (col)
SELECT ID FROM Dual where flag = 'Y'
你會通常在使用基於集合而不是程序操作時會看到性能增益,因爲大多數現代DBMS都設置爲執行基於集合的操作。你可以閱讀更多here。
當一個表的列值將被重複用於不同表上的多個查詢時,最好使用遊標。
假設使用遊標CUR_TEST從MY_TEST_TBL獲取id_test列的值。現在這個id_test列是MY_TEST_TBL中的外鍵。如果我們想使用id_test插入或更新表A_TBL,B_TBL和C_TBL中的任何行,那麼在這種情況下,最好使用遊標而不是使用複雜查詢。
希望這可能有助於瞭解光標的目的
http://wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them – HLGEM
http://stackoverflow.com/questions/1479680/ms-sql-server -when-a-cursor-good/1479751#1479751 – HLGEM
在你的查詢中添加一個'where t.flag ='Y''? ...MySQL INSERT INTO tbl_flag()VALUES()WHERE(SELECT COUNT(*)FROM Dual t其中t.flag ='Y')> 1' –