Provided by: manpages-zh_1.5-1_all bug

NAME

       DECLARE - 定義一蚢C標

SYNOPSIS

       DECLARE name [ BINARY ] [ INSENSITIVE ] [ [ NO ] SCROLL ]
           CURSOR [ { WITH | WITHOUT } HOLD ] FOR query
           [ FOR { READ ONLY | UPDATE [ OF column [, ...] ] } ]

DESCRIPTIONyz
       DECLARE   允許使用者創建遊標,   用於在一茪j的查詢裏推阯薑祤X行數據。
       使用 FETCH [fetch(7)],遊標可以既可以返回文本也可以返回二進制格式。

        通常遊標返回文字格式,和            SELECT            生成的是一樣的。
       因為數據在系統內部是用二進制格式存儲的,
       系統必須對數據做一定轉換以生成文字格式。
       一旦數據是以文本形式返回,那麼客戶端應用需n把它斨鉥咻角G進制進行操作。
       另外,文字格式一般都比對應的二進制格式佔的存儲空間大。
       二進制遊標給你返回內部二進制形態的數據。當然,如果你想以文本方式顯示數據,那麼以文本方式檢索會為你節約很多客戶端的工作。

        比如,如果查詢從一蚞蒱C返回一茪@,   在預設的遊標裏你將獲得一茼r符串
       1,而如果是一茪G進制遊標,  你將得到一  4-字節的包含該數熙“峖〞獐-
       ]大端序)。

        遊標應該小心使用二進制遊標。一些使用者應用如                      psql
       是不識別二進制遊標的, 而且期望返回的數據是文字格式。

              Note:  注意:   如果客戶端應用使用"擴展查詢"協議發出 FETCH 命令,
              那麼   Bind    協議聲明數據是用文本還是用二進制格式檢索。    這-
              蚇嚝僉郅\遊標的定義。因此,在使用擴展查詢協議的時-
              唌A二進制遊標的概念已經過時了                                 -
              任何遊標都可以當作文本或者二進制的格式發出。

PARAMETERS數
       name    將在隨後FETCH操作中使用的遊標名。

       BINARY  令遊標以二進制而不是文字格式獲取數據。

       INSENSITIVE
               表明從遊標檢索出來的數據不應該被其他進程或遊標的更新動作影響。
              在           PostgreSQL            裏,所有遊標都是不敏感的,這-
              蚚鶬鉿r沒有什麼作用,提供它只是為了和 SQL 標準相容。

       SCROLL

       NO SCROLL
              SCROLL
              聲明該遊標可以用於以非順序的方式檢索數據行(也就是向後檢索)。
              根據查詢的執行p劃的不同,聲明                             SCROLL
              可能會對查詢的執行時間附加一定的影響。         NO         SCROLL
              聲明該遊標不能用於以非順序的方式檢索數據行(也就是向後檢索)。

       WITH HOLD

       WITHOUT HOLD
              WITH    HOLD    聲明該遊標可以在創建它的事務成功提交後繼續使用。
              WITHOUT                                                     HOLD
              聲明該遊標不能在創建它的的事務提交後使用。如果既沒有聲明 WITHOUT
              HOLD,也沒有聲明 WITH HOLD, 那麼預設是 WITH HOLD。

       query       一紎ELECT查詢,它提供由遊標返回的行。     請參考     SELECT
              語句獲取有關有效查詢的詳細信息。

       FOR READ ONLY

       FOR UPDATE
              FOR    READ    ONLY    表明遊標將用於只讀模式。    FOR    UPDATE
              表明遊標將被用於更新表。  因為目前  PostgreSQL  不支持遊標更新,
              所以聲明  FOR  UPDATE  將產生一蚇欞~訊息。而聲明  FOR  READ ONLY
              沒有作用。

       column  將被更新的列。因為遊標更新目前不被 PostgreSQL 支持,  所以  FOR
              UPDATE 子句將產生一蚇欞~訊息。

       BINARY,INSENSITIVE,SCROLL 關鍵字可以以任何順序出現。

NOTES`N
        如果沒有聲明   WITH  HOLD,那麼這茤R令創建的遊標只能在當前事務中使用。
       Thus, DECLARE without WITH HOLD is useless outside a transaction block:
       the  cursor  would  survive  only  to  the completion of the statement.
       Therefore PostgreSQL reports an error if this command is used outside a
       transaction  block.   使用  BEGIN  [begin(7)],  COMMIT  [commit(7)]  和
       ROLLBACK [rollback(7)] 定義一茖禲C

        如果聲明了          WITH          HOLD,並且創建該遊標的事務成功提交,
       那麼遊標還可以在同一會話隨後的事務裏訪問。(但如果創建它的事務回滾,那麼遊標被刪除。)
       帶著       WITH        HOLD        創建的遊標是用一茤確的        CLOSE
       命令,或者是會話終止來關閉的。                    在目前的實現裏,由一-
       蚢C標代表的行是被拷貝到一蚆{時檔案或者記憶體區裏的,這樣他-
       抴N仍然可以在隨後的事務中被訪問。

        在定義一胻用來向後抓取的遊標的時唌A我抸雩蚆n明 SCROLL 選項。 這茯O SQL
       標準n求的。不過,為了和朽薊漯岩賑萛e, PostgreSQL 在沒有  SCROLL  的時-
       啎]允許向後抓取,   只n遊標的查詢p劃簡單得不需n額外的開銷就可以支持它。
       不過,我怮媊鹿野庤}發人不n依賴於使用沒有帶著                    SCROLL
       定義的遊標的後向查找功能。如果聲明了                                 NO
       SCROLL,那麼不管怎樣都會禁止向後抓取的功能。

        在 SQL 標準中遊標只能在嵌入  SQL  (ESQL)  的應用中使用。  PostgreSQL
       伺服器沒有一茤確的   OPEN    語句;一蚢C標被認為在定義時就已經打開了。
       不過,PostgreSQL嵌入的    SQL    預編譯器,    ecpg,    支持     SQL92
       習慣,包括那些和DECLARE和OPEN相關的語句。

EXAMPLESl
        定義一蚢C標:

       DECLARE liahona CURSOR FOR SELECT * FROM films;

        參閱 FETCH [fetch(7)] 獲取有關 遊標使用的更多例子。

COMPATIBILITYe性
       SQL     標準只允許在嵌入的    SQL    中和模塊中使用遊標。    PostgreSQL
       允許交互地使用遊標。

       SQL 標準允許遊標更新表數據。 所有 PostgreSQL 的遊標都是只讀的。

        二進制遊標是 PostgreSQL 擴展。

者
       Postgresql  <laser@pgsqldb.org>