DECLARE
DECLARE cursorname [ BINARY ] [ INSENSITIVE ] [ SCROLL ]
CURSOR FOR query
[ FOR { READ ONLY | UPDATE [ OF column [, ...] ] ]
輸入
-
cursorname
-
將在隨后 FETCH 操作中使用的游標名.
- BINARY
-
令游標以二進制而不是文本格式獲取數據.
- INSENSITIVE
-
SQL92 SQL92 關鍵字, 表明從游標檢索出來的數據不應該被其他進程或游標的更新動作影響. 因為在 Postgres 里,游標的操作總是發生在事務 里,所以總是符合上面描述.這個關鍵字沒有作用.
- SCROLL
-
SQL92 關鍵字,表明每個 FETCH 操作可以檢索出多行數據. 因為在Postgres 在任何情況下都允許這樣, 所以這個關鍵字沒有作用.
-
query
-
一個 SQL 查詢,它提供由游標控制的行. 請參考 SELECT 語句獲取有關有效參數的詳細信息.
- READ ONLY
-
SQL92 關鍵字,表明游標將用于只讀模式. 因為這是 Postgres 唯一的游標訪問模式, 所以該關鍵字沒有作用.
- UPDATE
-
SQL92 關鍵字,表明游標將被用于更新表. 因為游標更新目前還不被 Postgres 支持, 所以這個關鍵字將產生一個錯誤信息.
-
column
-
將被更新的列.因為游標更新目前不被 Postgres 支持, 所以 UPDATE 子句將產生一個錯誤信息.
輸出
-
SELECT
-
如果 SELECT 成功運行,返回此信息.
-
NOTICE: Closing pre-existing portal "cursorname"
-
如果在當前的事務塊中此游標名稱已經定義,返回此信息. 前面定義的游標被丟棄.
-
ERROR: DECLARE CURSOR may only be used in begin/end transaction blocks
-
如果一個游標沒有在事務塊內部定義,返回此信息.
描述
DECLARE 允許用戶創建游標, 用于在一個大的查詢里面檢索少數幾行數據. 使用 FETCH. ,游標可以既可以返回文本也可以返回二進制格式。
通常游標返回文本格式,要么是 ASCII 要么是某種由 Postgres 特定的后端決定的編碼方式. 因為數據在系統內部是用二進制格式存儲的, 系統必須對數據做一定轉換以生成文本格式. 另外,文本格式一般都比對應的二進制格式占的存儲空間大. 一旦格式轉換回文本,客戶應用需要將文本轉換為二進制格式來操作. BINARY 游標給你返回內部二進制形態的數據。
作為例子,如果查詢從一個整數列返回一個一, 在通常的游標里你將獲得一個字符串'1'而如果是一個二進制查詢, 你將得到一個 4-字節的等于ctrl-A('^A')的數值.
游標應該小心使用 BINARY. 一些用戶應用如 psql 是不識別二進制游標的, 而且期望返回的數據是文本格式.
而且,字符串表示方式是與硬件體系無關的, 而二進制格式會因不同的硬件體系不同而不同,而且 Postgres 對二進制游標不做字節序解析或者其他格式轉換 。 因此,如果你的客戶機和服務器使用不同的格式 (如: "高位高字節" 和 "底位底字節").你可能就不會希望你的數據 以二進制格式返回.所以二進制游標將比文本略微快一點, 因為二進制在服務器和客戶端的數據傳輸中有較少的轉換.
小技巧: 如果你希望用 ASCII 顯示數據, 將數據以 ASCII 模式訪問將節省客戶端的工作.
注意
游標只能在事務中使用.使用 BEGIN, COMMIT 和 ROLLBACK 定義一個事務塊。
在 SQL92 中游標只能在嵌入 SQL (ESQL) 的應用中使用. Postgres 后端沒有一個明確的 OPEN cursor 語句;一個游標被認為在定義時就已經打開了. 不過,Postgres嵌入的 SQL 預編譯器, ecpg, 支持 SQL92 習慣,包括那些和 DECLARE 和 OPEN 相關的語句.
用法
定義一個游標:
DECLARE liahona CURSOR
FOR SELECT * FROM films;
兼容性
SQL92
SQL92 只允許在嵌入的 SQL 中和模塊中使用游標. Postgres 允許交互地使用游標. SQL92 允許嵌入或模塊的游標更新數據庫信息. 所有 Postgres 的游標都是只讀的. BINARY 關鍵字是 Postgres 擴展.
|----------------------------------------------------------------------------------------|
版權聲明 版權所有 @zhyiwww
引用請注明來源 http://www.tkk7.com/zhyiwww
|----------------------------------------------------------------------------------------|
posted on 2006-06-02 18:56
zhyiwww 閱讀(418)
評論(0) 編輯 收藏 所屬分類:
database