OPEN

说明

打开一个游标

语法

open ::=

参数

cursor_name

曾经用 DECLARE 定义过的游标的名字。

parameter

如果曾经 DECLARE 定义的游标来自于一个查询计划,同时该查询计划需要参数,则打开游标时参数的值在这里给出。

注解

OPEN 是系统扩展。不仅可以用于嵌入式 SQL(E-SQL)中,也可以用于交互式 SQL 中。

OPEN 打开一个游标。如果游标来自于一个查询计划同时该查询计划需要参数才能执行,则在打开游标时需要使用 USING 关键字按顺序给出各参数的值。

如果在一个事务中打开游标,那么当事务提交或者回滚时,事务中打开的游标自动被关闭。

示例

示例1: 打开游标

--  清理环境
DEALLOCATE cur1;
DROP TABLE tab1 CASCADE;

--  创建表并插入数据
CREATE TABLE tab1(a INT);

INSERT INTO tab1 VALUES(1);
INSERT INTO tab1 VALUES(2);
INSERT INTO tab1 VALUES(3);


SELECT * FROM tab1 ORDER BY a;
A(int)      |
------------
1           |
------------
2           |
------------
3           |
总数目:3


--  声明一个游标
DECLARE cur1 CURSOR FOR SELECT * FROM tab1;/

--  打开游标
OPEN cur1;


--  获取数据
FETCH cur1;
A(int)      |
------------
1           |
总数目:1

FETCH cur1;
A(int)      |
------------
2           |
总数目:1

FETCH cur1;
A(int)      |
------------
3           |
总数目:1

FETCH cur1;
A(int)      |
总数目:0

--  关闭游标
CLOSE cur1;


--  删除游标和表
DEALLOCATE cur1;
DROP TABLE tab1;

示例2: 使用参数打开游标

--  清理环境
DEALLOCATE cur2;
DEALLOCATE PREPARE pp2;
DROP TABLE tab2 CASCADE;

--  创建表并插入数据
CREATE TABLE tab2(a INT, b VARCHAR(20));

INSERT INTO tab2 VALUES(1, 'aaa');
INSERT INTO tab2 VALUES(2, 'bbb');
INSERT INTO tab2 VALUES(3, 'ccc');


SELECT * FROM tab2 ORDER BY a;
A(int)      |B(varchar)      |
----------------------------
1           |aaa             |
----------------------------
2           |bbb             |
----------------------------
3           |ccc             |
总数目:3


--  创建一个查询计划
PREPARE pp2 AS SELECT * FROM tab2 WHERE a != ? AND b != ? ORDER BY a;

--  声明一个游标
DECLARE cur2 CURSOR FOR pp2;/

--  使用参数打开游标
OPEN cur2 USING 1, 'bbb';


--  获取数据
FETCH cur2;
A(int)      |B(varchar)      |
----------------------------
3           |ccc             |
总数目:1

FETCH cur2;
A(int)      |B(varchar)      |
总数目:0

--  关闭游标
CLOSE cur2;


--  删除游标和表
DEALLOCATE cur2;
DEALLOCATE PREPARE pp2;
DROP TABLE tab2;