Manpages

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