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;