# 拿来

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

# 概要

FETCH [ direction [ FROM | IN ] ] cursor_name

where direction can be empty or one of:

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

# 描述

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

游标有一个关联的位置,由拿来.光标位置可以在查询结果的第一行之前、结果的任何特定行上或结果的最后一行之后。创建时,游标位于第一行之前。在获取一些行之后,游标定位在最近检索的行上。如果拿来在可用行的末尾运行,则光标位于最后一行之后,或者如果向后获取,则位于第一行之前。获取所有或者向后获取所有将始终将光标定位在最后一行之后或第一行之前。

表格下一个,事先的,第一的,最后的,绝对,相对的适当移动游标后获取单行。如果没有这样的行,则返回一个空结果,并且游标位于第一行之前或最后一行之后(视情况而定)。

使用的表格向前落后检索向前或向后移动的指定行数,使光标位于最后返回的行上(或所有行之后/之前,如果*数数*超过可用的行数)。

相对 0,前进 0, 和向后 0all 请求获取当前行而不移动游标,即重新获取最近获取的行。除非光标位于第一行之前或最后一行之后,否则这将成功;在这种情况下,不会返回任何行。

# 笔记

本页描述了 SQL 命令级别的游标的使用。如果您尝试在 PL/pgSQL 函数中使用游标,则规则不同 — 请参阅第 43.7.3 节.

# 参数

方向

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

下一个

获取下一行。这是默认值,如果*方向*被省略。

事先的

获取前一行。

第一的

获取查询的第一行(与绝对 1)。

最后的

获取查询的最后一行(与绝对 -1)。

绝对 *数数*

获取*数数'查询的第 行,或绝对(*数数*)'从末尾算起的第 1 行 if数数是负数。位置在第一行之前或最后一行之后,如果数数*超出范围;尤其,绝对 0第一行之前的位置。

相对的 *数数*

获取*数数'th 后续行,或绝对(*数数*)'前行 if数数*是负数。相对 0重新获取当前行(如果有)。

数数

获取下一个*数数*行(与向前 *数数*)。

全部

获取所有剩余的行(与转发所有)。

向前

获取下一行(与下一个)。

向前 *数数*

获取下一个*数数*行。前进 0重新获取当前行。

转发所有

获取所有剩余的行。

落后

获取前一行(与事先的)。

向后 *数数*

获取先验*数数*行(向后扫描)。向后 0重新获取当前行。

向后全部

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

数数

*数数是一个可能有符号的整数常量,用于确定要获取的位置或行数。为了向前落后情况下,指定一个否定数数*相当于改变了感觉向前落后.

游标名

打开游标的名称。

# 输出

成功完成后,一个拿来命令返回形式的命令标签

FETCH count

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

# 笔记

游标应该用滚动如果一个人打算使用任何变体的选项拿来以外获取下一个或者向前提取计数为正。对于简单的查询,PostgreSQL 将允许从未声明的游标中向后获取滚动,但最好不要依赖这种行为。如果游标声明为无滚动,不允许向后提取。

绝对提取并不比通过相对移动导航到所需行快:底层实现无论如何都必须遍历所有中间行。负绝对提取更糟糕:必须将查询读到最后才能找到最后一行,然后从那里向后遍历。但是,倒回到查询的开头(与获取绝对值 0) 很快。

宣布用于定义游标。采用移动在不检索数据的情况下更改光标位置。

# 例子

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

BEGIN WORK;

-- Set up a cursor:
DECLARE liahona SCROLL CURSOR FOR SELECT * FROM films;

-- Fetch the first 5 rows in the cursor liahona:
FETCH FORWARD 5 FROM liahona;

 code  |          title          | did | date_prod  |   kind   |  len
## Compatibility

 The SQL standard defines `FETCH` for use in embedded SQL only. The variant of `FETCH` described here returns the data as if it were a `SELECT` result rather than placing it in host variables. Other than this point, `FETCH` is fully upward-compatible with the SQL standard.

 The `FETCH` forms involving `FORWARD` and `BACKWARD`, as well as the forms `FETCH *`count`*` and `FETCH ALL`, in which `FORWARD` is implicit, are PostgreSQL extensions.

 The SQL standard allows only `FROM` preceding the cursor name; the option to use `IN`, or to leave them out altogether, is an extension.

## See Also

[CLOSE](sql-close.html), [DECLARE](sql-declare.html), [MOVE](sql-move.html)