前言
顯式游標由開發者自訂與控制,包含游標的宣告、開啟、提取以及關閉等操作,常用屬性與隱式游標一樣,如下所示。
隱式游標由Oracle自動建立管理,進行如INSERT、UPDATE、DELETE以及SELECT INTO等動作皆會建立隱式游標,並由Oracle自動開啟、提取以及關閉。
開發者可透過以下常用屬性取得游標相關資訊。
- %FOUND:進行如INSERT、UPDATE、DELETE以及SELECT INTO等動作時,若影響一或多筆資料,就會回傳 TRUE,否則為 FALSE。
- %NOTFOUND:與 %FOUND 相反,進行如 INSERT、UPDATE、DELETE 以及SELECT INTO等動作時,若沒有影響任何資料,就會回傳TRUE,否則為FALSE。
- %ISOPEN:游標是否為開啟狀態,若使用隱式游標時,則總是回傳 FALSE,因資料庫進行完SQL敘述後,會自斷關閉。
- %ROWCOUNT:進行如INSERT、UPDATE、DELETE 以及 SELECT INTO等動作時,所影響的筆數。
*使用以上屬性前面須加上宣告的游標名稱,如:游標名稱%FOUND。
顯式游標的操作大致可分為以下四個步驟。
步驟一:宣告游標
顯式游標是由開發者自行操作使用,因此必須自行在「DECLARE」區塊進行宣告,宣告語法如下。
|
|
步驟二:開啟游標
於第一步驟中,宣告的游標給予了SELECT敘述語句,在此時還僅是屬於單純的宣告,並未實際執行SELECT敘述語句。當開啟游標時,才會實際執行宣告中的SELECT敘述語句,將結果集返回,並將內部的邏輯指標只向第一筆資料列,等待後續使用FETCH來提取。開啟游標語法如下。
|
|
步驟三:提取游標
此步驟則是使用FETCH提取資料,提取資料包含以下兩個步驟。
- 讀取目前資料列。
- 移動至下一個資料列。
提取資料可以使已將欄位存放至不同的變數內,亦可將資料存放至RECORD當中,再進行處理。
將資料提取至變數方式如下。
|
|
步驟四:關閉游標
當游標使用完之後,應該立即關閉,進行資源的釋放,關閉游標語法如下。
|
|
一般提取資料會透過迴圈協助逐一處理,以下使用LOOP迴圈進行相關範例。
使用變數方式提取
|
|
使用RECORD方式提取
|
|
執行結果
|
|