oracle的遊標用法,open for循環遊標和fetch into用法上有什麼區別?
阿新 • • 發佈:2018-12-26
open的時候不會讀資料,FETCH才讀。
1、說明遊標。說明遊標的時候並不執行select語句。
declare <遊標名> cursor for <select語句>;
2、開啟遊標。開啟遊標實際上是執行相應的select語句,把查詢結果讀取到緩衝區中。這時候遊標處於活動狀態,指標指向查詢結果集的第一條紀錄。
open <遊標名>;
3、推進遊標指標並讀取當前紀錄。用fetch語句把遊標指標向前推進一條紀錄,同時將緩衝區中的當前紀錄讀取出來送到變數中。fetch語句通常用在一個迴圈結構體中,通過迴圈執行fetch語句逐條取出結果集中的行進行處理。現在好多資料庫中,還允許任意方向任意步長易懂遊標指標,而不僅僅是把遊標指標向前推進一行了。
fetch <遊標名> into <變數1>,<變數2>...
4、關閉遊標。用close語句關閉遊標,釋放結果集佔用的緩衝區及其他資源。遊標關閉後,就不再和原來的查詢結果集相聯絡。但遊標可以再次開啟,與新的查詢結果相聯絡。
close <遊標名>;
我的意思是,按照我的查詢條件應該只有一條記錄,如果open之後指標指向結果集的第一條資料,那麼在接下來fetch後就指向下一條(為空),但是為什麼cur_emp%found為真呢?
cur_emp%found這個判斷的是上次fetch是否取到資料,和當前指標沒啥關係