# 拿来
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
, 和向后 0
all 请求获取当前行而不移动游标,即重新获取最近获取的行。除非光标位于第一行之前或最后一行之后,否则这将成功;在这种情况下,不会返回任何行。
# 笔记
本页描述了 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)