VastbaseE100

基于开源技术的HTAP数据库管理系统。性能优异,稳定可靠,提供诸多专属领域特性。

Menu

FETCH

FETCH - 使用游标从查询中检索行

语法格式

FETCH [ direction [ FROM | IN ] ] cursor_name

其中 direction 可以为空或者以下之一:

    NEXT
    PRIOR
    FIRST
    LAST
    ABSOLUTE count
    RELATIVE count
    count
    ALL
    FORWARD
    FORWARD count
    FORWARD ALL
    BACKWARD
    BACKWARD count
    BACKWARD ALL

说明

FETCH 使用先前创建的游标检索行。

游标具有关联的位置, FETCH使用该位置。游标位置可以位于查询结果的第一行之前,结果的任何特定行之上,也可以位于结果的最后一行之后。创建时,光标位于第一行之前。获取一些行后,光标位于最近检索的行上。如果FETCH在可用行的末尾运行,则光标将位于最后一行之后,或者如果向后取回则位于第一行之前。FETCH ALL 或 FETCH BACKWARD ALL将始终将光标置于最后一行之后或第一行之前。

表格 NEXT , PRIOR , FIRST , LAST , ABSOLUTE , RELATIVE在适当移动光标后获取单行。如果没有这样的行,则返回空结果,并且光标将根据需要保留在第一行之前或最后一行之后。

使用 FORWARD 和 BACKWARD的表单检索向前或向后移动的指定行数,使光标位于最后返回的行上(如果 count超过可用行数,则在所有行之后/之前)。

RELATIVE 0 , FORWARD 0 和 BACKWARD 0所有请求都在不移动光标的情况下获取当前行,即重新获取最近获取的行。除非光标位于第一行之前或最后一行之后,否则这将成功;在这种情况下,不返回任何行。

注意

此页面描述了SQL命令级别的游标用法。

参数说明

  • direction

    direction 定义了获取方向和要获取的行数。它可以是以下之一:

  • NEXT

    获取下一行。如果省略 direction ,则这是默认值。

  • PRIOR

    获取前一行。

  • FIRST

    获取查询的第一行(与 ABSOLUTE 1 相同)。

  • LAST

    获取查询的最后一行(与 ABSOLUTE -1 相同)。

  • ABSOLUTE count

    如果 count 为负,则获取查询的 count '行,或者从末尾获取 abs(count)'行。如果 count超出范围,则在第一行之前或最后一行之后的位置;特别是在第一行之前的ABSOLUTE 0 位置。

  • RELATIVE count

    如果 count 为负,则获取 count 后续行,或 abs(count) 前一行。 RELATIVE 0重新获取当前行(如果有)。

  • count

    获取下一行 count 行(与 FORWARD count 相同)。

  • ALL

    获取所有剩余行(与 FORWARD ALL 相同)。

  • FORWARD

    获取下一行(与 NEXT 相同)。

  • FORWARD count

    获取下一个 count 行。 FORWARD 0 重新获取当前行。

  • FORWARD ALL

    获取所有剩余的行。

  • BACKWARD

    获取前一行(与 PRIOR 相同)。

  • BACKWARD count

    获取前面的 count 行(向后扫描)。 BACKWARD 0 重新获取当前行。

  • BACKWARD ALL

    获取所有先前的行(向后扫描)。

  • count

    count 是一个可能有符号的整数常量,用于确定要获取的行的位置或数量。对于FORWARD 和 BACKWARD 情况,指定负 count 等同于更改 FORWARD 和 BACKWARD的含义。

  • cursor_name

    打开游标的名称。

输出

成功完成后, FETCH 命令将返回表单的命令标记

FETCH count

count是获取的行数(可能为零)。请注意,在psql中,实际上不会显示命令标记,因为psql会显示提取的行。

注意事项

如果打算使用除 FETCH NEXT 或 FETCH FORWARD 之外的 FETCH的任何变量并使用正计数,则应使用 SCROLL选项声明游标。对于简单的查询,Vastbase E100将允许从未使用 SCROLL声明的游标进行向后提取,但这种行为是最好的不依赖。如果使用 NO SCROLL 声明游标,则不允许向后提取。

ABSOLUTE fetches并不比使用相对移动导航到所需行更快:底层实现必须遍历所有中间行。负绝对提取甚至更糟:查询必须读到最后才能找到最后一行,然后从那里向后遍历。但是,倒带到查询的开头(与FETCH ABSOLUTE 0 一样)很快。

DECLARE用于定义游标。使用 MOVE更改光标位置而不检索数据。

示例

以下示例使用游标遍历表:

BEGIN WORK;

-- 建立一个游标:
DECLARE liahona SCROLL CURSOR FOR SELECT * FROM films;

-- 在游标 liahona 中取出前 5 行:
FETCH FORWARD 5 FROM liahona;

 code  |          title          | did | date_prod  |   kind   |  len
-------+-------------------------+-----+------------+----------+-------
 BL101 | The Third Man           | 101 | 1949-12-23 | Drama    | 01:44
 BL102 | The African Queen       | 101 | 1951-08-11 | Romantic | 01:43
 JL201 | Une Femme est une Femme | 102 | 1961-03-12 | Romantic | 01:25
 P_301 | Vertigo                 | 103 | 1958-11-14 | Action   | 02:08
 P_302 | Becket                  | 103 | 1964-02-03 | Drama    | 02:28

-- 取出前面一行:
FETCH PRIOR FROM liahona;

 code  |  title  | did | date_prod  |  kind  |  len
-------+---------+-----+------------+--------+-------
 P_301 | Vertigo | 103 | 1958-11-14 | Action | 02:08

-- 关闭游标并且结束事务:
CLOSE liahona;
COMMIT WORK;