1999-07-22 17:09:15 +02:00
|
|
|
<!--
|
|
|
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/declare.sgml,v 1.7 1999/07/22 15:09:09 thomas Exp $
|
|
|
|
Postgres documentation
|
|
|
|
-->
|
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<refentry id="SQL-DECLARE">
|
|
|
|
<refmeta>
|
1999-07-22 17:09:15 +02:00
|
|
|
<refentrytitle id="SQL-DECLARE-TITLE">
|
1998-09-07 17:56:20 +02:00
|
|
|
DECLARE
|
1999-07-06 19:16:42 +02:00
|
|
|
</refentrytitle>
|
|
|
|
<refmiscinfo>SQL - Language Statements</refmiscinfo>
|
|
|
|
</refmeta>
|
|
|
|
<refnamediv>
|
|
|
|
<refname>
|
1998-09-07 17:56:20 +02:00
|
|
|
DECLARE
|
1999-07-06 19:16:42 +02:00
|
|
|
</refname>
|
|
|
|
<refpurpose>
|
1998-09-07 17:56:20 +02:00
|
|
|
Defines a cursor for table access
|
1999-07-06 19:16:42 +02:00
|
|
|
</refpurpose>
|
1998-12-29 03:24:47 +01:00
|
|
|
</refnamediv>
|
1999-07-06 19:16:42 +02:00
|
|
|
<refsynopsisdiv>
|
|
|
|
<refsynopsisdivinfo>
|
1999-07-22 17:09:15 +02:00
|
|
|
<date>1999-07-20</date>
|
1999-07-06 19:16:42 +02:00
|
|
|
</refsynopsisdivinfo>
|
|
|
|
<synopsis>
|
1998-09-07 17:56:20 +02:00
|
|
|
DECLARE <replaceable class="parameter">cursor</replaceable> [ BINARY ] [ INSENSITIVE ] [ SCROLL ]
|
|
|
|
CURSOR FOR <replaceable class="parameter">query</replaceable>
|
|
|
|
[ FOR { READ ONLY | UPDATE [ OF <replaceable class="parameter">column</replaceable> [, ...] ] ]
|
1999-07-06 19:16:42 +02:00
|
|
|
</synopsis>
|
|
|
|
<refsect2 id="R2-SQL-DECLARE-1">
|
|
|
|
<refsect2info>
|
|
|
|
<date>1998-04-15</date>
|
|
|
|
</refsect2info>
|
|
|
|
<title>
|
1998-09-01 17:53:09 +02:00
|
|
|
Inputs
|
1999-07-06 19:16:42 +02:00
|
|
|
</title>
|
|
|
|
<para>
|
|
|
|
<variablelist>
|
|
|
|
<varlistentry>
|
|
|
|
<term><replaceable class="parameter">cursor</replaceable></term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
The name of the cursor to be used in subsequent FETCH operations..
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
1998-09-07 17:56:20 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<varlistentry>
|
|
|
|
<term>BINARY</term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
Causes the cursor to fetch data in binary
|
|
|
|
rather than in text format.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
1998-09-07 17:56:20 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<varlistentry>
|
|
|
|
<term>INSENSITIVE</term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
<acronym>SQL92</acronym> keyword indicating that data retrieved
|
|
|
|
from the cursor should be unaffected by updates from other processes or cursors.
|
|
|
|
Since cursor operations occur within transactions
|
|
|
|
in <productname>Postgres</productname> this is always the case.
|
|
|
|
This keyword has no effect.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
1998-09-07 17:56:20 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<varlistentry>
|
|
|
|
<term>SCROLL</term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
<acronym>SQL92</acronym> keyword indicating that data may be retrieved
|
|
|
|
in multiple rows per FETCH operation. Since this is allowed at all times
|
|
|
|
by <productname>Postgres</productname> this keyword has no effect.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
1998-09-07 17:56:20 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<varlistentry>
|
|
|
|
<term><replaceable class="parameter">query</replaceable></term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
An SQL query which will provide the rows to be governed by the
|
|
|
|
cursor.
|
|
|
|
Refer to the SELECT statement for further information about
|
|
|
|
valid arguments.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
1998-09-07 17:56:20 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<varlistentry>
|
|
|
|
<term>READ ONLY</term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
<acronym>SQL92</acronym> keyword indicating that the cursor will be used
|
|
|
|
in a readonly mode. Since this is the only cursor access mode
|
|
|
|
available in <productname>Postgres</productname> this keyword has no effect.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
1998-09-07 17:56:20 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<varlistentry>
|
|
|
|
<term>UPDATE</term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
<acronym>SQL92</acronym> keyword indicating that the cursor will be used
|
|
|
|
to update tables. Since cursor updates are not currently
|
|
|
|
supported in <productname>Postgres</productname> this keyword
|
|
|
|
provokes an informational error message.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
1998-09-07 17:56:20 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<varlistentry>
|
|
|
|
<term><replaceable class="parameter">column</replaceable></term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
Column(s) to be updated.
|
|
|
|
Since cursor updates are not currently
|
|
|
|
supported in <productname>Postgres</productname> the UPDATE clause
|
|
|
|
provokes an informational error message.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
1998-09-07 17:56:20 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
</variablelist>
|
|
|
|
</para>
|
|
|
|
</refsect2>
|
1998-09-01 17:53:09 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<refsect2 id="R2-SQL-DECLARE-2">
|
|
|
|
<refsect2info>
|
|
|
|
<date>1998-04-15</date>
|
|
|
|
</refsect2info>
|
|
|
|
<title>
|
1998-09-01 17:53:09 +02:00
|
|
|
Outputs
|
1999-07-06 19:16:42 +02:00
|
|
|
</title>
|
|
|
|
<para>
|
1998-09-07 17:56:20 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<variablelist>
|
|
|
|
<varlistentry>
|
|
|
|
<term><computeroutput>
|
|
|
|
SELECT
|
|
|
|
</computeroutput></term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
The message returned if the SELECT is run successfully.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
1998-09-07 17:56:20 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<varlistentry>
|
|
|
|
<term><computeroutput>
|
|
|
|
NOTICE
|
|
|
|
BlankPortalAssignName: portal "<replaceable class="parameter">cursor</replaceable>" already exists
|
|
|
|
</computeroutput></term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
This error occurs if <replaceable class="parameter">cursor</replaceable> is already declared.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
1998-09-07 17:56:20 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<varlistentry>
|
|
|
|
<term><computeroutput>
|
1998-09-07 17:56:20 +02:00
|
|
|
ERROR: Named portals may only be used in begin/end transaction blocks
|
1999-07-06 19:16:42 +02:00
|
|
|
</computeroutput></term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
This error occurs if the cursor is not declared within a transaction block.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
</variablelist>
|
1998-12-29 03:24:47 +01:00
|
|
|
</para>
|
1999-07-06 19:16:42 +02:00
|
|
|
</refsect2>
|
|
|
|
</refsynopsisdiv>
|
|
|
|
|
|
|
|
<refsect1 id="R1-SQL-DECLARE-1">
|
|
|
|
<refsect1info>
|
|
|
|
<date>1998-09-04</date>
|
|
|
|
</refsect1info>
|
|
|
|
<title>
|
1998-09-01 17:53:09 +02:00
|
|
|
Description
|
1999-07-06 19:16:42 +02:00
|
|
|
</title>
|
|
|
|
<para>
|
1999-07-22 17:09:15 +02:00
|
|
|
<command>DECLARE</command> allows a user to create cursors, which
|
|
|
|
can be used to retrieve
|
|
|
|
a small number of rows at a time out of a larger query. Cursors can
|
|
|
|
return data either in text or in binary format using
|
|
|
|
<xref linkend="sql-fetch-title" endterm="sql-fetch-title">.
|
1999-07-06 19:16:42 +02:00
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
1999-07-22 17:09:15 +02:00
|
|
|
Normal cursors return data in text format, either ASCII or another
|
1999-07-06 19:16:42 +02:00
|
|
|
encoding scheme depending on how the <productname>Postgres</productname>
|
|
|
|
backend was built. Since
|
1998-09-01 17:53:09 +02:00
|
|
|
data is stored natively in binary format, the system must
|
1998-09-07 17:56:20 +02:00
|
|
|
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
|
1999-07-22 17:09:15 +02:00
|
|
|
application may need to convert it to a binary format to
|
|
|
|
manipulate it.
|
1998-09-01 17:53:09 +02:00
|
|
|
BINARY cursors give you back the data in the native binary
|
1999-07-22 17:09:15 +02:00
|
|
|
representation.
|
1998-12-29 03:24:47 +01:00
|
|
|
</para>
|
1999-07-06 19:16:42 +02:00
|
|
|
|
1998-12-29 03:24:47 +01:00
|
|
|
<para>
|
1998-09-07 17:56:20 +02:00
|
|
|
As an example, if a query returns a value of one from an integer column,
|
1999-07-06 19:16:42 +02:00
|
|
|
you would get a string of '1' with a default cursor
|
|
|
|
whereas with a binary cursor you would get
|
|
|
|
a 4-byte value equal to control-A ('^A').
|
1999-07-22 17:09:15 +02:00
|
|
|
</para>
|
1999-07-06 19:16:42 +02:00
|
|
|
|
1999-07-22 17:09:15 +02:00
|
|
|
<para>
|
|
|
|
BINARY cursors should be used carefully. User applications such
|
|
|
|
as <application>psql</application> are not aware of binary cursors
|
|
|
|
and expect data to come back in a text format.
|
1998-12-29 03:24:47 +01:00
|
|
|
</para>
|
1999-07-06 19:16:42 +02:00
|
|
|
|
|
|
|
<para>
|
1999-07-22 17:09:15 +02:00
|
|
|
String representation is architecture-neutral whereas binary
|
|
|
|
representation can differ between different machine architectures
|
|
|
|
and <emphasis><productname>Postgres</productname> does not resolve
|
|
|
|
byte ordering or representation issues for binary cursors</emphasis>.
|
1998-09-01 17:53:09 +02:00
|
|
|
Therefore, if your client machine and server machine use different
|
1998-09-07 17:56:20 +02:00
|
|
|
representations (e.g. "big-endian" versus "little-endian"),
|
1999-07-06 19:16:42 +02:00
|
|
|
you will probably not want your data returned in
|
1998-09-01 17:53:09 +02:00
|
|
|
binary format.
|
1999-07-22 17:09:15 +02:00
|
|
|
However, binary cursors may be a
|
|
|
|
little more efficient since there is less conversion overhead in
|
|
|
|
the server to client data transfer.
|
1999-07-06 19:16:42 +02:00
|
|
|
|
1998-12-29 03:24:47 +01:00
|
|
|
<tip>
|
|
|
|
<para>
|
|
|
|
If you intend to display the data in
|
|
|
|
ASCII, getting it back in ASCII will save you some
|
|
|
|
effort on the client side.
|
|
|
|
</para>
|
|
|
|
</tip>
|
1999-07-06 19:16:42 +02:00
|
|
|
</para>
|
|
|
|
|
|
|
|
<refsect2 id="R2-SQL-DECLARE-3">
|
|
|
|
<refsect2info>
|
|
|
|
<date>1998-09-04</date>
|
|
|
|
</refsect2info>
|
|
|
|
<title>
|
1998-09-01 17:53:09 +02:00
|
|
|
Notes
|
1999-07-06 19:16:42 +02:00
|
|
|
</title>
|
1999-07-22 17:09:15 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<para>
|
1999-07-22 17:09:15 +02:00
|
|
|
Cursors are only available in transactions. Use to
|
|
|
|
<xref linkend="sql-begin-title" endterm="sql-begin-title">,
|
|
|
|
<xref linkend="sql-commit-title" endterm="sql-commit-title">
|
|
|
|
and
|
|
|
|
<xref linkend="sql-rollback-title" endterm="sql-rollback-title">
|
|
|
|
to define a transaction block.
|
1999-07-06 19:16:42 +02:00
|
|
|
</para>
|
1999-07-22 17:09:15 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<para>
|
1999-07-22 17:09:15 +02:00
|
|
|
In <acronym>SQL92</acronym> cursors are only available in
|
|
|
|
embedded <acronym>SQL</acronym> (<acronym>ESQL</acronym>) applications.
|
|
|
|
The <productname>Postgres</productname> backend
|
|
|
|
does not implement an explicit <command>OPEN cursor</command>
|
1998-09-07 17:56:20 +02:00
|
|
|
statement; a cursor is considered to be open when it is declared.
|
1999-07-22 17:09:15 +02:00
|
|
|
However, <application>ecpg</application>, the
|
|
|
|
embedded SQL preprocessor for <productname>Postgres</productname>,
|
|
|
|
supports the <acronym>SQL92</acronym> cursor conventions, including those
|
|
|
|
involving DECLARE and OPEN statements.
|
1999-07-06 19:16:42 +02:00
|
|
|
</para>
|
|
|
|
</refsect2>
|
1998-09-01 17:53:09 +02:00
|
|
|
</refsect1>
|
1999-07-06 19:16:42 +02:00
|
|
|
|
|
|
|
<refsect1 id="R1-SQL-DECLARESTATEMENT-2">
|
|
|
|
<title>
|
1998-09-01 17:53:09 +02:00
|
|
|
Usage
|
1999-07-06 19:16:42 +02:00
|
|
|
</title>
|
|
|
|
<para>
|
1998-09-01 17:53:09 +02:00
|
|
|
To declare a cursor:
|
1999-07-06 19:16:42 +02:00
|
|
|
|
|
|
|
<programlisting>
|
1998-09-22 17:48:03 +02:00
|
|
|
DECLARE liahona CURSOR
|
|
|
|
FOR SELECT * FROM films;
|
1999-07-06 19:16:42 +02:00
|
|
|
</programlisting>
|
|
|
|
</para>
|
|
|
|
</refsect1>
|
1998-09-01 17:53:09 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<refsect1 id="R1-SQL-DECLARESTATEMENT-3">
|
|
|
|
<title>
|
1998-09-01 17:53:09 +02:00
|
|
|
Compatibility
|
1999-07-06 19:16:42 +02:00
|
|
|
</title>
|
|
|
|
|
|
|
|
<refsect2 id="R2-SQL-DECLARESTATEMENT-4">
|
|
|
|
<refsect2info>
|
|
|
|
<date>1998-04-15</date>
|
|
|
|
</refsect2info>
|
|
|
|
<title>
|
1998-09-01 17:53:09 +02:00
|
|
|
SQL92
|
1999-07-06 19:16:42 +02:00
|
|
|
</title>
|
|
|
|
<para>
|
1998-12-29 03:24:47 +01:00
|
|
|
<acronym>SQL92</acronym> allows cursors only in embedded <acronym>SQL</acronym>
|
|
|
|
and in modules. <productname>Postgres</productname> permits cursors to be used
|
|
|
|
interactively.
|
|
|
|
<acronym>SQL92</acronym> allows embedded or modular cursors to
|
|
|
|
update database information.
|
|
|
|
All <productname>Postgres</productname> cursors are readonly.
|
|
|
|
The BINARY keyword is a <productname>Postgres</productname> extension.
|
|
|
|
</para>
|
|
|
|
</refsect2>
|
|
|
|
</refsect1>
|
1999-07-06 19:16:42 +02:00
|
|
|
</refentry>
|
1998-09-01 17:53:09 +02:00
|
|
|
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
|
|
Local variables:
|
|
|
|
mode: sgml
|
1999-07-06 19:16:42 +02:00
|
|
|
sgml-omittag:nil
|
1998-09-01 17:53:09 +02:00
|
|
|
sgml-shorttag:t
|
|
|
|
sgml-minimize-attributes:nil
|
|
|
|
sgml-always-quote-attributes:t
|
|
|
|
sgml-indent-step:1
|
|
|
|
sgml-indent-data:t
|
|
|
|
sgml-parent-document:nil
|
|
|
|
sgml-default-dtd-file:"../reference.ced"
|
|
|
|
sgml-exposed-tags:nil
|
|
|
|
sgml-local-catalogs:"/usr/lib/sgml/catalog"
|
|
|
|
sgml-local-ecat-files:nil
|
|
|
|
End:
|
|
|
|
-->
|