Oracle遊標介紹
Oracle的遊標介紹
Oracle中的PL/SQL的遊標是指把資料庫中查詢出來的資料以暫存資料表的形式存放在記憶體中,遊標可以對儲存在記憶體中的資料進行操作,返回一條或者一組資料,或者一條資料也不返回。PL/SQL中的記錄和表類型雖然也能用來儲存資料,但對一組儲存在記憶體中的資料進行操作,還是不太方便,遊標恰好是這方面的工具。
PL/SQL包含隱含遊標和顯示遊標,其中隱含遊標用於處理SELECT INTO和DML語句,而顯示遊標則專門用於處理SELECT語句返回的多行資料,遊標的基本操作有:
- 聲明遊標
- 開啟遊標
- 提取遊標
- 關閉遊標
聲明遊標
定義一個遊標名稱來對應一條查詢語句,文法如下:
CURSOR cursor_name [{parameter_name [IN] data_type [{:=|DEFAULT} value][...]}] IS select_statement [FOR UPDATE [OF column [...]][NOWAIT]]說明:
1. data_type 為輸入參數指定資料類型,但不能指定精度或長度
2. FOR UPDATE 用於在使用遊標的資料時,鎖定遊標結果集與表中對應的資料的所有行或部分列
3. OF 如果不使用OF子句,則表示鎖定遊標結果集與表中對應資料行的所有列,若使用了OF子句,則只鎖定指定的列
4. NOWAIT 如果表中的資料行被某使用者鎖定,那麼其他使用者的FOR UPDATE操作將會一直等到該使用者釋放這些資料行的鎖定後才會執行,而如果使用了NOWAIT,則其他使用者在使用OPEN命令開啟遊標時會立即返回錯誤資訊。
開啟遊標
只有開啟遊標後,Oracle才會執行查詢語句,其文法:
OPEN cursor_name [(value,...)];開啟遊標後,遊標對應的SELECT語句也就被執行了,通過檢索遊標從結果集中擷取單行資料並儲存到定義的變數中,文法如下:
FETCH cursor_name INTO variable [,...];其中,variable 是用來儲存結果集中單行資料的變數,可以選擇多個普通類型的變數,一對一地接收行中的列值,也可以使用一個%ROWTYPE類型的變數,或自訂的記錄類型變數,接收行中所有的列值。
關閉遊標
關閉遊標,釋放系統資源,其文法如下:
CLOSE cursor_name;