NAME
FETCH - 用 游 标 从 查 询 中 抓 取 行
SYNOPSIS
FETCH [ direction { FROM | IN } ] cursorname
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
DESCRIPTION 描 述
FETCH 使 用 游 标 检 索 行 。 一 个 游 标 有 一 个 由 FETCH 使 用 的 相 关 联 的 位 置 。 游 标 得 位 置 可 以 在 查 询 结 果 的 第 一 行 之 前 , 或 者 在 结 果 中 的 任 意 行 , 或 者 在 结 果 的 最 后 一 行 之 后 。 在 创 建 完 之 后 , 游 标 是 放 在 第 一 行 之 前 的 。 在 抓 取 了 一 些 行 之 后 , 游 标 放 在 检 索 到 的 最 后 一 行 上 。 如 果 FETCH 抓 完 了 所 有 可 用 行 , 那 么 它 就 停 在 最 后 一 行 后 面 , 或 者 在 向 前 抓 去 的 情 况 下 是 停 在 第 一 行 前 面 。 FETCH ALL 或 者 FETCH BACKWARD ALL 将 总 是 把 游 标 的 位 置 放 在 最 后 一 行 或 者 在 第 一 行 前 面 。
NEXT, PRIOR, FIRST, LAST, ABSOLUTE, RELATIVE 形 式 在 恰 当 地 移 动 游 标 之 后 抓 取 一 个 行 。 如 果 没 有 数 据 行 了 , 那 么 返 回 一 个 空 的 结 果 , 那 么 游 标 就 会 停 在 查 询 结 果 的 最 后 一 行 之 后 或 者 在 第 一 行 之 前 。
FORWARD 和 BACKWARD 形 式 在 向 前 或 者 向 后 移 动 的 过 程 中 抓 取 指 定 的 行 数 , 然 后 把 游 标 定 位 在 最 后 返 回 的 行 上 ( 或 者 是 , 如 果 count 大 于 可 用 的 行 数 , 在 所 有 行 之 前 或 之 后 。 )
RELATIVE 0, FORWARD 0, 和 BACKWARD 0 都 要 求 在 不 移 动 游 标 的 前 提 下 抓 取 当 前 行 - - - 也 就 是 重 新 抓 取 最 近 刚 刚 抓 取 过 的 行 。 除 非 游 标 定 位 在 第 一 行 之 前 或 者 最 后 一 行 之 后 , 这 个 动 作 都 应 该 成 功 , 而 在 那 两 种 情 况 下 , 不 返 回 任 何 行 。
PARAMETERS 参 数
direction
direction 定 义 抓 取 的 方 向 和 抓 取 的 行 数 。 它 可 以 是 下 述 之 一 :
NEXT 抓 取 下 一 行 。
direction 省 略 时 这 是 缺 省 值 。
PRIOR 抓 取 前 面 一 行 。
FIRST 抓 取 查 询 的 第 一
行 ( 和
ABSOLUTE 1 相 同 ) 。
LAST 抓 取 查 询 的
最 后 一 行 ( 和
ABSOLUTE -1 相 同 ) 。
ABSOLUTE count
抓 取 查 询 中 第 count
行 , 或 者 , 如
果 count < 0, 从 查 询
结 果 末 尾 抓 取
第 abs(count)行 。 如 果 count
超 出 了 范 围 ,
那 么 定 位 在 第
一 行 之 前 和 最
后 一 行 之 后 的
位 置 ; 特 别 是
ABSOLUTE 0 定 位 在 第 一
行 之 前 。
RELATIVE count 抓 取 随
后 的 第 count 行 , 或
者 , 如 果 count < 0 的
时 候 , 抓 取 前
面 的 第 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 的 方 向 。
cursorname 一 个 打 开 的 游 标 的 名 称 。
OUTPUTS 输 出
成 功 完 成 时 , 一 个 FETCH 命 令 返 回 一 个 形 如 下 面 的 标 记
FETCH count 这 里 的 count 是 抓 取 的 行 数 ( 可 能 是 零 ) 。 请 注 意 在 psql 里 , 命 令 标 签 实 际 上 不 会 显 示 , 因 为 psql 用 抓 取 的 行 数 取 代 了 。
NOTES 注 意
如 果 你 想 使 用 FETCH NEXT 之 外 的 任 何 FETCH 的 变 种 , 或 者 是 带 负 数 计 数 的 FETCH FORWARD。 那 么 定 义 游 标 的 时 候 应 该 带 着 SCROLL 选 项 。 对 于 简 单 的 查 询 , PostgreSQL 会 允 许 那 些 没 有 带 SCROLL 选 项 定 义 的 游 标 也 可 以 反 向 抓 取 , 但 是 我 们 最 好 不 要 依 赖 这 个 行 为 。 如 果 游 标 定 义 了 NO SCROLL, 那 么 不 允 许 反 向 抓 取 。
ABSOLUTE 抓 取 不 会 比 用 相 对 位 移 移 动 到 需 要 的 数 据 行 更 快 : 因 为 下 层 的 实 现 必 须 遍 历 所 有 中 间 的 行 。 负 数 的 绝 对 抓 取 甚 至 更 糟 糕 : 查 询 必 须 一 直 读 到 结 尾 才 能 找 到 最 后 一 行 , 然 后 从 那 里 开 始 反 向 遍 历 。 不 过 , 回 退 到 查 询 开 头 ( 就 像 FETCH ABSOLUTE 0) 很 快 。 在 游 标 中 更 新 数 据 还 不 被 PostgreSQL 支 持 。
DECLARE [declare(7)] 语 句 用 于 定 义 一 个 游 标 。 使 用 MOVE [move(7)] 语 句 来 改 变 游 标 位 置 而 不 检 索 数 据 。
EXAMPLES 例 子
下 面 的 例 子 用 一 个 游 标 跨 过 一 个 表 。
BEGIN WORK;
-- 建
立 一 个 游 标 :
DECLARE liahona SCROLL CURSOR FOR SELECT * FROM films;
-- 抓
取 头 5 行 到 游 标
liahona 里 :
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;
COMPATIBILITY 兼 容 性
SQL 标 准 定 义 的 FETCH 只 用 于 嵌 入 式 环 境 下 。 这 里 描 述 的 FETCH 变 种 是 把 结 果 数 据 像 SELECT 结 果 那 样 返 回 , 而 不 是 把 它 放 在 宿 主 变 量 里 。 除 了 这 点 之 外 , FETCH 和 SQL 标 准 完 全 向 上 兼 容 。 涉 及 FORWARD 和 BACKWARD 的 FETCH 形 式 ( 包 括 FETCH count 和 FETCH ALL 的 形 式 , 这 个 时 候 FORWARD 是 隐 含 的 ) 是 PostgreSQL 的 扩 展 。
SQL 标 准 只 允 许 游 标 前 面 有 FROM, 用 IN 是 一 种 扩 展 。
译 者
Postgresql 中 文 网 站 何 伟 平 <laser [AT] pgsqldb.org>
跋
本 页 面 中 文 版 由 中 文 man 手 册 页 计 划 提 供 。 中 文 man 手 册 页 计 划 : https://github.com/man-pages-zh/manpages-zh