2007-01-22

Cursor in TSQL

宣告DECLARE→開啟OPEN→處理→關閉CLOSE→→解除DEALLOCATE
CURSOR的宣告
DECLARE cursor_name CURSOR
[ LOCAL | GLOBAL ]
[ FORWARD_ONLY | FAST_FORWARD | STATIC | 
KEYSET | DYNAMIC ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ] lFOR select_statement [ FOR UPDATE ]
開啟: OPEN cursor_name
LOCAL | GLOBAL : 可否適用於建立該CURSOR的程序外
FORWARD_ONLY : 預設值, 只能由第一筆資料往後讀取, 無法回頭, 無法修改資料
FAST_FORWARD : 在唯讀狀態下得到效能最佳化, 只能往後讀取資料, 無法回頭
STATIC : 可前後移動, 但資料內容無法修改 KEYSET : 可前後移動, 可修改, 但無法完全反應出變動 (例如新增一筆資料)
DYNAMIC : 可前後移動, 隨時得到最新資料, 但系統負擔最重
READ_ONLY : cursor內的資料不能更改
SCROLL_LOCKS : 當資料被讀入cursor後即被鎖定, 確保資料異動成功
OPTIMISTIC : 當更新cursor資料時才鎖定, 如果該資料已被異動過, 之後的異動不會成功
TYPE_WARNING : 當程序中內部宣告與使用者要求的型態不同時, 發出警告給使用者
FETCH
[ [ NEXT | PRIOR | FIRST | LAST |
ABSOLUTE {數值|變數} |
RELATIVE {數值|變數} ] FROM ] cursor_name [ INTO 變數#1…] Sequential Cursor的讀取 • FETCH NEXT Scroll Cursor的讀取
FETCH [NEXT | PRIOR | FIRST | LAST
| ABSOLUTE n | RELATIE n ]
異動Cursor所指表格內的資料
宣告Cursor時要加 FOR UPDATE 刪除資料: • DELETE FROM table_name WHERE CURRENT OF cursor_name 更新資料:
UPDATE table_name SET old_value = new_value WHERE CURRENT OF cursor_name
關閉: CLOSE cursor_name 解除: DEALLOCATE [GLOBAL] cursor_name 宣告CURSOR變數: lTYPE 1:
DECLARE @cur1 CURSOR
DECLARE cur2 CURSOR FOR select_statement
SET @cur1 = cur2 lTYPE 2:
DECLARE @cur3 CURSOR
SET @cur3 = CURSOR [L|G][F|F|S|K|D][R|S|O][T]
       FOR select_statement

沒有留言:

張貼留言