| PostgreSQL | ||
|---|---|---|
| 上一頁 | 下一頁 | |
DECLARE ─ 為訪問表定義一個游標
DECLARE cursorname [ BINARY ] [ INSENSITIVE ] [ SCROLL ]
CURSOR FOR query
[ FOR { READ ONLY | UPDATE [ OF column [, ...] ] ]
DECLARE 允許用戶創建游標,用於在一個大的查詢裡面檢索少數幾行數據。使用 FETCH,游標可以既可以返回文本也可以返回二進制格式。
通常游標返回文本格式,要麼是 ASCII 要麼是某種由 Postgres 特定的後端決定的編碼方式。因為數據在系統內部是用二進制格式儲存的,系統必須對數據做一定轉換以產生文本格式。另外,文本格式一般都比對應的二進制格式占的儲存空間大。一旦格式轉換回文本,客戶應用需要將文本轉換為二進制格式來操作。BINARY 游標給你返回內部二進制形態的數據。
作為例子,如果查詢從一個整數列返回一個一,在通常的游標裡你將獲得一個字符串'1'而如果是一個二進制查詢,你將得到一個4-字節的等於ctrl-A('^A')的數值。
BINARY 游標應該小心使用。一些用戶應用如 psql 是不識別二進制游標的,而且期望返回的數據是文本格式。
然而,字符串表示方式是與硬件體系無關的,而二進制格式會因不同的硬件體系不同而不同,而且 Postgres 對二進制游標不做字節續解析或者其他格式轉換。因此,如果你的客戶機和伺服器使用不同的格式(如: "高位高字節" 和 "底位底字節")。你可能就不會希望你的數據以二進制格式返回。所以二進制游標將比文本略微快一點,因為二進制在伺服器和客戶端的數據傳輸中有較少的轉換。
小技巧: 如果你希望用 ASCII 顯示數據,將數據以 ASCII 模式訪問將節省客戶端的工作。
游標只能在事務中使用。使用 BEGIN,COMMIT 和 ROLLBACK 定義一個事務塊。
在 SQL92 中游標只能在嵌入 SQL (ESQL)的應用中使用。Postgres 沒有一個顯式的 OPEN cursor 語句﹔一個游標被認為在定義時就已經打開了。不過,ecpg, Postgres 嵌入的 SQL 預編譯器,支援 SQL92 習慣,包括那些和 DECLARE 和 OPEN 相關的語句。
定義一個游標:
DECLARE liahona CURSOR
FOR SELECT * FROM films;
| 上一頁 | 首頁 | 下一頁 |
| CREATE VIEW | 開頭 | DELETE |