SQL CURSOR_STATUS() 函数
SQL CURSOR_STATUS() 函数用于确定当前光标的状态。在调用光标之前,应用程序可以使用该函数来检查其状态。特别是在使用应用程序时使用一个或多个光标。必须牢记此函数的非确定性性质。因此,结果可能会根据情况而变化。
SQL CURSOR_STATUS() 函数以下列smallint值返回:
返回值 | 光标名称 | 光标变量 |
---|---|---|
1 | 光标结果至少有一行。 | 分配给此变量的光标是打开的。 |
0 | 光标结果集为空。 | 分配给此变量的光标是打开的,但结果肯定为空。 |
-1 | 光标已关闭。 | 分配给此变量的光标已关闭。 |
-2 | 无适用。 | 以前调用的过程未将光标分配给此输出变量。 |
-3 | 指定的名称的光标不存在。 | 分配给此变量的光标不存在,或者存在但尚未为其分配光标。 |
语法
SQL CURSOR_STATUS()函数的语法如下:
CURSOR_STATUS
(
{ 'local' , 'cursor_name' }
| { 'global' , 'cursor_name' }
| { 'variable' , 'cursor_variable' }
)
参数
- local - 指示游标源是一个本地游标名称。
-
cursor_name - 指示游标名称必须符合数据库标识符规则。
-
global - 指示游标源是一个全局游标名称。
-
variable - 指示游标源是一个本地变量。
-
cursor_variable - 指示游标的nme,并使用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.