summaryrefslogtreecommitdiff
path: root/doc/src/sgml/ref/declare.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/sgml/ref/declare.sgml')
-rw-r--r--doc/src/sgml/ref/declare.sgml137
1 files changed, 99 insertions, 38 deletions
diff --git a/doc/src/sgml/ref/declare.sgml b/doc/src/sgml/ref/declare.sgml
index 2801aeeabb..f0673c44b6 100644
--- a/doc/src/sgml/ref/declare.sgml
+++ b/doc/src/sgml/ref/declare.sgml
@@ -1,5 +1,5 @@
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/declare.sgml,v 1.20 2003/03/21 17:11:46 momjian Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/declare.sgml,v 1.21 2003/03/27 16:51:27 momjian Exp $
PostgreSQL documentation
-->
@@ -21,8 +21,8 @@ PostgreSQL documentation
<date>1999-07-20</date>
</refsynopsisdivinfo>
<synopsis>
-DECLARE <replaceable class="parameter">cursorname</replaceable> [ BINARY ] [ INSENSITIVE ] [ SCROLL ]
- CURSOR FOR <replaceable class="parameter">query</replaceable>
+DECLARE <replaceable class="parameter">cursorname</replaceable> [ BINARY ] [ INSENSITIVE ] [ [ NO ] SCROLL ]
+ CURSOR [ { WITH | WITHOUT } HOLD ] FOR <replaceable class="parameter">query</replaceable>
[ FOR { READ ONLY | UPDATE [ OF <replaceable class="parameter">column</replaceable> [, ...] ] ]
</synopsis>
<refsect2 id="R2-SQL-DECLARE-1">
@@ -38,7 +38,8 @@ DECLARE <replaceable class="parameter">cursorname</replaceable> [ BINARY ] [ INS
<term><replaceable class="parameter">cursorname</replaceable></term>
<listitem>
<para>
- The name of the cursor to be used in subsequent FETCH operations.
+ The name of the cursor to be used in subsequent
+ <command>FETCH</command> operations.
</para>
</listitem>
</varlistentry>
@@ -57,8 +58,20 @@ DECLARE <replaceable class="parameter">cursorname</replaceable> [ BINARY ] [ INS
<listitem>
<para>
<acronym>SQL92</acronym> keyword indicating that data retrieved
- from the cursor should be unaffected by updates from other processes or cursors.
- By default, all cursors are insensitive. This keyword has no effect.
+ from the cursor should be unaffected by updates from other
+ processes or cursors. By default, all cursors are insensitive.
+ This keyword currently has no effect and is present for
+ compatibility with the SQL standard.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>NO SCROLL</term>
+ <listitem>
+ <para>
+ Specifies that the cursor cannot be used to retrieve rows in a
+ nonsequential fashion (e.g., backward).
</para>
</listitem>
</varlistentry>
@@ -67,8 +80,33 @@ DECLARE <replaceable class="parameter">cursorname</replaceable> [ BINARY ] [ INS
<term>SCROLL</term>
<listitem>
<para>
- Specifies that the cursor may be used to retrieve rows
- in a nonsequential fashion (e.g., backwards).
+ Specifies that the cursor may be used to retrieve rows in a
+ nonsequential fashion (e.g., backward). Depending upon the
+ complexity of the query's execution plan, specifying
+ <literal>SCROLL</literal> may impose a slight performance penalty
+ on the query's execution time.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>WITHOUT HOLD</term>
+ <listitem>
+ <para>
+ Specifies that the cursor cannot be used outside of the
+ transaction that created it. If neither <literal>WITHOUT
+ HOLD</literal> nor <literal>WITH HOLD</literal> is specified,
+ <literal>WITH HOLD</literal> is the default.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>WITH HOLD</term>
+ <listitem>
+ <para>
+ Specifies that the cursor may be used after the transaction
+ that creates it successfully commits.
</para>
</listitem>
</varlistentry>
@@ -124,7 +162,8 @@ DECLARE <replaceable class="parameter">cursorname</replaceable> [ BINARY ] [ INS
</para>
<para>
- The BINARY, INSENSITIVE, and SCROLL keywords may appear in any order.
+ The <literal>BINARY</literal>, <literal>INSENSITIVE</literal>,
+ <literal>SCROLL</literal> keywords may appear in any order.
</para>
</refsect2>
@@ -144,7 +183,7 @@ DECLARE CURSOR
</computeroutput></term>
<listitem>
<para>
- The message returned if the SELECT is run successfully.
+ The message returned if the <command>SELECT</command> is run successfully.
</para>
</listitem>
</varlistentry>
@@ -155,9 +194,8 @@ WARNING: Closing pre-existing portal "<replaceable class="parameter">cursorname
</computeroutput></term>
<listitem>
<para>
- This message is reported if the same cursor name was already declared
- in the current transaction block. The previous definition is
- discarded.
+ This message is reported if a cursor with the same name already
+ exists. The previous definition is discarded.
</para>
</listitem>
</varlistentry>
@@ -168,7 +206,9 @@ ERROR: DECLARE CURSOR may only be used in begin/end transaction blocks
</computeroutput></term>
<listitem>
<para>
- This error occurs if the cursor is not declared within a transaction block.
+ This error occurs if the cursor is not declared within a
+ transaction block, and <literal>WITH HOLD</literal> is not
+ specified.
</para>
</listitem>
</varlistentry>
@@ -193,16 +233,14 @@ ERROR: DECLARE CURSOR may only be used in begin/end transaction blocks
</para>
<para>
- Normal cursors return data in text format, the same as a <command>SELECT</>
- would produce. Since
- data is stored natively in binary format, the system must
- do a conversion to produce the text format. In addition,
- text formats are often larger in size than the corresponding binary format.
- Once the information comes back in text form, the client
- application may need to convert it to a binary format to
- manipulate it.
- BINARY cursors give you back the data in the native binary
- representation.
+ Normal cursors return data in text format, the same as a
+ <command>SELECT</> would produce. Since data is stored natively in
+ binary format, the system must do a conversion to produce the text
+ format. In addition, text formats are often larger in size than the
+ corresponding binary format. Once the information comes back in
+ text form, the client application may need to convert it to a
+ binary format to manipulate it. BINARY cursors give you back the
+ data in the native binary representation.
</para>
<para>
@@ -245,7 +283,9 @@ ERROR: DECLARE CURSOR may only be used in begin/end transaction blocks
</title>
<para>
- Cursors are only available within transactions. Use
+ If <literal>WITH HOLD</literal> is not specified, the cursor
+ created by this command can only be used within the current
+ transaction. Use
<xref linkend="sql-begin" endterm="sql-begin-title">,
<xref linkend="sql-commit" endterm="sql-commit-title">
and
@@ -254,12 +294,25 @@ ERROR: DECLARE CURSOR may only be used in begin/end transaction blocks
</para>
<para>
- The <literal>SCROLL</> option should be specified when defining a cursor
- that will be used to fetch backwards. This is required by
- <acronym>SQL92</acronym>. However, for compatibility with
- earlier versions, <productname>PostgreSQL</productname> will allow
- backward fetches without <literal>SCROLL</>, if the cursor's query plan
- is simple enough that no extra overhead is needed to support it.
+ If <literal>WITH HOLD</literal> is specified and the transaction
+ that created the cursor successfully commits, the cursor can be
+ accessed outside the creating transaction. If the creating
+ transaction is aborted, the cursor is removed. A cursor created
+ with <literal>WITH HOLD</literal> is closed when an explicit
+ <command>CLOSE</command> command is issued on it, or the client
+ connection is terminated.
+ </para>
+
+ <para>
+ The <literal>SCROLL</> option should be specified when defining a
+ cursor that will be used to fetch backwards. This is required by
+ <acronym>SQL92</acronym>. However, for compatibility with earlier
+ versions, <productname>PostgreSQL</productname> will allow
+ backward fetches without <literal>SCROLL</>, if the cursor's query
+ plan is simple enough that no extra overhead is needed to support
+ it. However, application developers are advised not to rely on
+ using backward fetches from a cursor that has not been created
+ with <literal>SCROLL</literal>.
</para>
<para>
@@ -271,7 +324,7 @@ ERROR: DECLARE CURSOR may only be used in begin/end transaction blocks
However, <application>ecpg</application>, the
embedded SQL preprocessor for <productname>PostgreSQL</productname>,
supports the <acronym>SQL92</acronym> cursor conventions, including those
- involving DECLARE and OPEN statements.
+ involving <command>DECLARE</command> and <command>OPEN</command> statements.
</para>
</refsect2>
</refsect1>
@@ -303,13 +356,21 @@ DECLARE liahona CURSOR
SQL92
</title>
<para>
- <acronym>SQL92</acronym> allows cursors only in embedded <acronym>SQL</acronym>
- and in modules. <productname>PostgreSQL</productname> permits cursors to be used
- interactively.
+ <para>
+ <acronym>SQL92</acronym> allows cursors only in embedded
+ <acronym>SQL</acronym> and in modules. <productname>PostgreSQL</>
+ permits cursors to be used interactively.
+ </para>
+
+ <para>
<acronym>SQL92</acronym> allows embedded or modular cursors to
- update database information.
- All <productname>PostgreSQL</productname> cursors are read only.
- The BINARY keyword is a <productname>PostgreSQL</productname> extension.
+ update database information. All <productname>PostgreSQL</>
+ cursors are read only.
+ </para>
+
+ <para>
+ The <literal>BINARY</literal> keyword is a
+ <productname>PostgreSQL</productname> extension.
</para>
</refsect2>
</refsect1>