[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 數據庫 > 其它 > 正文
PostgreSQL7.0手冊-用戶手冊-19. SQL命令-FETCH
編譯:何偉平 laser@zhengmai.com.cn (2001-04-21 22:01:25)
FETCH
名稱
FETCH  用遊標獲取行 

用法
FETCH [ selector ] [ count ] { IN | FROM } cursor
FETCH [ RELATIVE ] [ { [ # | ALL | NEXT | PRIOR ] } ] FROM ] cursor
輸入
selector 
selector 定義抓取的方向.它可以是下述之一: 
FORWARD 
  
抓取面的行.selector 省略時這是缺省值. 
BACKWARD 
抓取前面行. 
RELATIVE 
為 SQL92 兼容設置的多余鍵字. 
count 
  
count 決定抓取幾行.可以是下列之一: 
# 
一個表明抓取幾行的整數.注意負整數等效改變 FORWARD 和 BACKWARD 屬性. 
ALL 
檢索所有剩余的行. 
NEXT 
等效聲明 count 為 1. 
PRIOR 
等效聲明 count 為 -1. 
cursor 
一個打開的遊標的名稱. 

輸出
FETCH 返回由聲明的遊標定義的查詢的結果.如果查詢失敗,將返回下面的信息: 
NOTICE: PerformPortalFetch: portal "cursor" not found 
如果 cursor 沒有定義,返回此信息.遊標必須在一個事務塊中定義. 
NOTICE: FETCH/ABSOLUTE not supported, using RELATIVE 
Postgres 不支持遊標的絕對定位. 
ERROR: FETCH/RELATIVE at current position is not supported 
SQL92 允許我們用下面語句在"當前位置"不停地檢索遊標 
FETCH RELATIVE 0 FROM cursor
Postgres 目前不支持這種用法;實際上,零被保留用檢索所有行,等效聲明 ALL 關鍵字.如果使用 RELATIVE 關鍵字, Postgres 假設用戶試圖使用 SQL92 的特性,因而返回此錯誤.
描述
FETCH 允許用戶使用遊標檢索行.所要檢索的行數用 # 聲明.如果遊標中剩下的行小 #,那只有那些可用的抓過來.用關鍵字 ALL 代替數字將導致遊標中所有剩余行被抓過來.記錄可以 FORWARD (向前)抓,也可以 BACKWARD (向)抓.缺省的方向是 FORWARD (向前). 
小技巧: 可以用負數作為行記數,符號等效顛倒抓取方向關鍵字(FORWARD 和 BACKWARD).例如, FORWARD -1 等效 BACKWARD 1.
注意
注意 FORWARD 和 BACKWARD 關鍵字是 Postgres擴展.SQL92 語法也支持,在此命令的第二種形式中聲明.詳細的兼容性信息見下面. 
在遊標中更新數據還不被 Postgres 支持,因為將遊標更新影射回基本表是不太可能的,這一點對 VIEW 更新也一樣.因而用戶必須顯式的使用 UPDATE 命令來更新數據. 

遊標只能用事務內部,因為它們存儲的數據跨越了多個用戶的查詢. 

使用 MOVE 語句改變遊標位置.使用 DECLARE 語句定義一個遊標.使用 BEGIN,COMMIT,和 ROLLBACK 語句獲取更多關事務的信息.

用法
下面的例子用一個遊標跨過一個表。 
-- 建立一個遊標:

BEGIN WORK;
DECLARE liahona CURSOR FOR SELECT * FROM films;

-- 抓取頭 5 行到遊標 liahona 裡:
FETCH FORWARD 5 IN 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 BACKWARD 1 IN liahona;

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

-- 關閉遊標並提交工作:

CLOSE liahona;
COMMIT WORK;
兼容性
SQL92
注意:非嵌入式遊標的使用是 Postgres 擴展.遊標的語法和用途與定義與 SQL92裡定義的嵌入式用法相似。
SQL92 允許遊標在 FETCH 中的絕對定位,並且允許將結果放在顯式的變量裡. 
FETCH ABSOLUTE #
    FROM cursor
    INTO :variable [, ...]
ABSOLUTE 
遊標將放置在寫明的絕對的行數的位置上.在 Postgres 中所有的行數都是相對數量,所以這一功能不支持. 
:variable 
目標宿主變量. 
(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
PostgreSQL7.0手冊-用戶手冊-19. SQL命令-VACUUM (2001-04-21 22:16:33)
PostgreSQL7.0手冊-用戶手冊-19. SQL命令-UPDATE (2001-04-21 22:16:12)
PostgreSQL7.0手冊-用戶手冊-19. SQL命令-UNLISTEN (2001-04-21 22:15:44)
PostgreSQL7.0手冊-用戶手冊-19. SQL命令-TRUNCATE (2001-04-21 22:15:24)
PostgreSQL7.0手冊-用戶手冊-19. SQL命令-SHOW (2001-04-21 22:15:01)
PostgreSQL7.0手冊-用戶手冊-19. SQL命令-SET (2001-04-21 22:14:42)
PostgreSQL7.0手冊-用戶手冊-19. SQL命令-SELECT INTO (2001-04-21 22:14:19)
PostgreSQL7.0手冊-用戶手冊-19. SQL命令-SELECT (2001-04-21 22:14:01)
PostgreSQL7.0手冊-用戶手冊-19. SQL命令-ROLLBACK (2001-04-21 22:13:41)
PostgreSQL7.0手冊-用戶手冊-19. SQL命令-REVOKE (2001-04-21 22:13:18)

===更多相關===
 

★  樊強制作 歡迎分享  ★