SQL - CURSOR_STATUS() 函式



SQL 的CURSOR_STATUS()函式用於確定當前遊標的狀態。在呼叫遊標之前,應用程式可以使用此函式檢查其狀態。尤其是在應用程式使用一個或多個遊標時。必須記住此函式的非確定性。因此,結果可能會根據情況而變化。

SQL 的CURSOR_STATUS()函式返回如下所示的smallint值:

返回值 遊標名稱 遊標變數
1 遊標結果至少有一行。 已分配給此變數的遊標已開啟。
0 遊標結果集為空。 已分配給此變數的遊標已開啟,但結果肯定為空。
-1 遊標已關閉。 已分配給此變數的遊標已關閉。
-2 不適用。 先前呼叫的過程未將遊標分配給此OUTPUT變數。
-3 指定名稱的遊標不存在。 已分配給此變數ID的遊標不存在,或者如果存在,則尚未為其分配遊標。

語法

以下是SQL CURSOR_STATUS()函式的語法:

CURSOR_STATUS   
   (  
      { 'local' , 'cursor_name' }   
      | { 'global' , 'cursor_name' }   
      | { 'variable' , 'cursor_variable' }   
   )

引數

  • local − 指示遊標源是本地遊標名稱。

  • cursor_name − 指示遊標的名稱,必須符合資料庫識別符號規則。

  • global − 指示遊標源是全域性遊標名稱。

  • variable − 指示遊標源是區域性變數。

  • cursor_variable − 指示遊標的名稱,使用th定義

示例

讓我們建立一個名為Workers的表,我們將在下面的示例中使用它,使用以下查詢:

CREATE TABLE Workers(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25) ,
   SALARY   DECIMAL (18, 2),       
   PRIMARY KEY (ID)
);

現在,讓我們使用INSERT語句在Workers表中插入一些記錄,如下面的查詢所示:

INSERT INTO Workers VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );
INSERT INTO Workers VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );
INSERT INTO Workers VALUES (3, 'kaushik', 23, 'Kota', 2000.00 );
INSERT INTO Workers VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 );
INSERT INTO Workers VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );
INSERT INTO Workers VALUES (6, 'Komal', 22, 'MP', 4500.00 );

驗證

讓我們使用以下查詢檢查表是否已成功建立:

SELECT * FROM Workers;

輸出

執行上述查詢後,將生成如下所示的輸出:

+----+----------+-----+-----------+---------+
| ID | NAME     | AGE | ADDRESS   | SALARY  |
+----+----------+-----+-----------+---------+
|  1 | Ramesh   |  32 | Ahmedabad | 2000.00 |
|  2 | Khilan   |  25 | Delhi     | 1500.00 |
|  3 | kaushik  |  23 | Kota      | 2000.00 |
|  4 | Chaitali |  25 | Mumbai    | 6500.00 |
|  5 | Hardik   |  27 | Bhopal    | 8500.00 |
|  6 | Komal    |  22 | MP        | 4500.00 |
+----+----------+-----+-----------+---------+

示例

在下面的示例中,我們將為上面建立的Workers表建立遊標,並使用以下查詢獲取狀態:

DECLARE work CURSOR  FOR 
SELECT AGE,ADDRESS FROM Workers
SELECT CURSOR_STATUS ('global','work') AS 'After declare'

輸出

當我們執行上述查詢時,將獲得如下輸出:

+---------------+
| After declare |
+---------------+
|           -1  |
+---------------+

示例

讓我們來看下面的示例,我們將開啟遊標並使用以下查詢獲取狀態:

OPEN work
SELECT CURSOR_STATUS('global','work') AS 'After Open'

輸出

當我們執行上述查詢時,將獲得如下輸出:

+------------------------------------+
|                         After Open |
+------------------------------------+
|                                 1  |
+------------------------------------+

示例

讓我們來看另一個查詢,我們將關閉查詢並使用以下查詢檢查狀態:

CLOSE work
SELECT CURSOR_STATUS('global','work') AS 'After Close'

輸出

執行上述查詢後,將顯示如下輸出:

+------------------------------------+
|                        After Close |
+------------------------------------+
|                                 -1 |
+------------------------------------+

示例

讓我們來看下面的查詢,我們將執行fetch_status並在遊標變數中讀取所有行,使用以下查詢:

SELECT CURSOR_STATUS('global','work') AS 'isValid?'

輸出

執行上述查詢後,將顯示如下輸出:

+-------------------+      
|          isValid? |
+-------------------+
|              -1   |
+-------------------+

示例

讓我們來看下面的查詢,我們將使用以下查詢釋放遊標:

DEALLOCATE work

輸出

執行上述查詢後,將顯示如下輸出:

Commands completed successfully.
sql-cursor-functions.htm
廣告