FETCH

说明

从游标中取数据

语法

fetch ::=

dir ::=

cnt ::=

参数

dir

  • BACKWARD相对于游标当前位置向后获取元组。
  • FORWARD相对于游标当前位置,向前获取元组。
  • RELATIVE指示相对于游标当前位置开始获取元组。
  • ABSOLUTE从相对于游标开头的绝对位置开始获取元组。ABSOLUTE暂不支持。

默认为RELATIVE

count | ALL | NEXT | PRIOR

  • count按指定方向和相对位置从游标中获取的元组的数量。为 0 时与 ALL意义相同。为负数时,相当于取数据方向反向(如 BACKWARD -2 相当于 FORWARD2 )。如果 count 大于游标中该方向的所有元组数,则相当于 ALL 。
  • ALL获取所有元组。
  • NEXT获取指定位置开始的下一个元组。
  • PRIOR获取指定位置开始的前一个元组。

默认为NEXT

IN

指示在哪个游标中获取数据。同 FROM 。

FROM

指示从哪个游标中获取数据。同 IN 。

cursor_name

曾经用DECLARE定义的游标名。

注解

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

当不指定相对位置、数量等信息时,默认是从游标当前位置开始,前向获取一个元组。

如果想使游标能够反向获取数据,在定义游标时要指定 SCROLL 属性。

示例

示例1: 从游标中获取数据

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


--  创建表
CREATE TABLE tab1(a INT);

INSERT INTO tab1 VALUES(100);
INSERT INTO tab1 VALUES(200);
INSERT INTO tab1 VALUES(300);
INSERT INTO tab1 VALUES(400);
INSERT INTO tab1 VALUES(500);
INSERT INTO tab1 VALUES(600);
INSERT INTO tab1 VALUES(700);
INSERT INTO tab1 VALUES(800);
INSERT INTO tab1 VALUES(900);


SELECT * FROM tab1 ORDER BY a;
A(int)      |
------------
100         |
------------
200         |
------------
300         |
------------
400         |
------------
500         |
------------
600         |
------------
700         |
------------
800         |
------------
900         |
总数目:9

--  声明游标
DECLARE cur1 SCROLL CURSOR FOR SELECT * FROM tab1 WHERE a != 200 ORDER BY a;/

--  打开游标
OPEN cur1;


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


--  获取多行
FETCH FORWARD 5 FROM cur1;
A(int)      |
------------
300         |
------------
400         |
------------
500         |
------------
600         |
------------
700         |
总数目:5


--  反向获取数据
FETCH BACKWARD 1 FROM cur1;
A(int)      |
------------
600         |
总数目:1


--  获取全部数据
FETCH FORWARD ALL IN cur1;
A(int)      |
------------
700         |
------------
800         |
------------
900         |
总数目:3


--  反向获取全部数据
FETCH BACKWARD ALL IN cur1;
A(int)      |
------------
900         |
------------
800         |
------------
700         |
------------
600         |
------------
500         |
------------
400         |
------------
300         |
------------
100         |
总数目:8


--  关闭游标
CLOSE cur1;

--  删除游标
DEALLOCATE cur1;


--  删除表
DROP TABLE tab1;