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;