FETCH¶
说明¶
从游标中取数据
参数¶
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;