declare.sgml
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:9k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. <refentry id="SQL-DECLARE">
  2.  <refmeta>
  3.   <refentrytitle>
  4.    DECLARE
  5.   </refentrytitle>
  6.   <refmiscinfo>SQL - Language Statements</refmiscinfo>
  7.  </refmeta>
  8.  <refnamediv>
  9.   <refname>
  10.    DECLARE
  11.   </refname>
  12.   <refpurpose>
  13.    Defines a cursor for table access
  14.   </refpurpose>
  15.  </refnamediv>
  16.  <refsynopsisdiv>
  17.   <refsynopsisdivinfo>
  18.    <date>1998-09-04</date>
  19.   </refsynopsisdivinfo>
  20.   <synopsis>
  21. DECLARE <replaceable class="parameter">cursor</replaceable> [ BINARY ] [ INSENSITIVE ] [ SCROLL ]
  22.     CURSOR FOR <replaceable class="parameter">query</replaceable>
  23.     [ FOR { READ ONLY | UPDATE [ OF <replaceable class="parameter">column</replaceable> [, ...] ] ]
  24.   </synopsis>
  25.   <refsect2 id="R2-SQL-DECLARE-1">
  26.    <refsect2info>
  27.     <date>1998-04-15</date>
  28.    </refsect2info>
  29.    <title>
  30.     Inputs
  31.    </title>
  32.    <para>
  33.     <variablelist>
  34.      <varlistentry>
  35.       <term><replaceable class="parameter">cursor</replaceable></term>
  36.       <listitem>
  37.        <para>
  38. The name of the cursor to be used in subsequent FETCH operations..
  39.        </para>
  40.       </listitem>
  41.      </varlistentry>
  42.      <varlistentry>
  43.       <term>BINARY</term>
  44.       <listitem>
  45.        <para>
  46. Causes the cursor to fetch data in binary
  47. rather than in text format.
  48.        </para>
  49.       </listitem>
  50.      </varlistentry>
  51.      <varlistentry>
  52.       <term>INSENSITIVE</term>
  53.       <listitem>
  54.        <para>
  55. <acronym>SQL92</acronym> keyword indicating that data retrieved
  56. from the cursor should be unaffected by updates from other processes or cursors.
  57. Since cursor operations occur within transactions
  58. in <productname>Postgres</productname> this is always the case.
  59. This keyword has no effect.
  60.        </para>
  61.       </listitem>
  62.      </varlistentry>
  63.      <varlistentry>
  64.       <term>SCROLL</term>
  65.       <listitem>
  66.        <para>
  67. <acronym>SQL92</acronym> keyword indicating that data may be retrieved
  68. in multiple rows per FETCH operation. Since this is allowed at all times
  69. by <productname>Postgres</productname> this keyword has no effect.
  70.        </para>
  71.       </listitem>
  72.      </varlistentry>
  73.      <varlistentry>
  74.       <term><replaceable class="parameter">query</replaceable></term>
  75.       <listitem>
  76.        <para>
  77. An SQL query which will provide the rows to be governed by the
  78. cursor.
  79. Refer to the SELECT statement for further information about
  80. valid arguments.
  81.        </para>
  82.       </listitem>
  83.      </varlistentry>
  84.      <varlistentry>
  85.       <term>READ ONLY</term>
  86.       <listitem>
  87.        <para>
  88. <acronym>SQL92</acronym> keyword indicating that the cursor will be used
  89. in a readonly mode. Since this is the only cursor access mode
  90. available in <productname>Postgres</productname> this keyword has no effect.
  91.        </para>
  92.       </listitem>
  93.      </varlistentry>
  94.      <varlistentry>
  95.       <term>UPDATE</term>
  96.       <listitem>
  97.        <para>
  98. <acronym>SQL92</acronym> keyword indicating that the cursor will be used
  99. to update tables. Since cursor updates are not currently
  100. supported in <productname>Postgres</productname> this keyword
  101. provokes an informational error message.
  102.        </para>
  103.       </listitem>
  104.      </varlistentry>
  105.      <varlistentry>
  106.       <term><replaceable class="parameter">column</replaceable></term>
  107.       <listitem>
  108.        <para>
  109. Column(s) to be updated.
  110. Since cursor updates are not currently
  111. supported in <productname>Postgres</productname> the UPDATE clause
  112. provokes an informational error message.
  113.        </para>
  114.       </listitem>
  115.      </varlistentry>
  116.     </variablelist>
  117.    </para>
  118.   </refsect2>
  119.   <refsect2 id="R2-SQL-DECLARE-2">
  120.    <refsect2info>
  121.     <date>1998-04-15</date>
  122.    </refsect2info>
  123.    <title>
  124.     Outputs
  125.    </title>
  126.    <para>
  127.     <variablelist>
  128.      <varlistentry>
  129.       <term><computeroutput>
  130. SELECT
  131.        </computeroutput></term>
  132.       <listitem>
  133.        <para>
  134. The message returned if the SELECT is run successfully.
  135.        </para>
  136.       </listitem>
  137.      </varlistentry>
  138.      <varlistentry>
  139.       <term><computeroutput>
  140. NOTICE
  141. BlankPortalAssignName: portal "<replaceable class="parameter">cursor</replaceable>" already exists
  142.        </computeroutput></term>
  143.       <listitem>
  144.        <para>
  145. This error occurs if <replaceable class="parameter">cursor</replaceable> is already declared.
  146.        </para>
  147.       </listitem>
  148.      </varlistentry>
  149.      <varlistentry>
  150.       <term><computeroutput>
  151. ERROR:  Named portals may only be used in begin/end transaction blocks
  152.        </computeroutput></term>
  153.       <listitem>
  154.        <para>
  155. This error occurs if the cursor is not declared within a transaction block.
  156.        </para>
  157.       </listitem>
  158.      </varlistentry>     
  159.     </variablelist>
  160.    </para>
  161.   </refsect2>
  162.  </refsynopsisdiv>
  163.  <refsect1 id="R1-SQL-DECLARE-1">
  164.   <refsect1info>
  165.    <date>1998-09-04</date>
  166.   </refsect1info>
  167.   <title>
  168.    Description
  169.   </title>
  170.   <para>
  171.    <command>DECLARE</command> allows a user to create cursors, which can be used to retrieve
  172.    a small number of rows at a time out of a larger query. Cursors can return
  173.    data either in text or in binary foramt.
  174.   </para>
  175.   <para>
  176.    Normal cursors return data  in text format, either ASCII or another
  177.    encoding scheme depending on how the <productname>Postgres</productname>
  178.    backend was built. Since
  179.    data is stored natively in binary format, the system must
  180.    do a conversion to produce the text format. In addition,
  181.    text formats are often larger in size than the corresponding binary format.
  182.    Once the information comes back in text form,  the client
  183.    application may have to convert it to a binary format to
  184.    manipulate it anyway.
  185.   </para>
  186.   <para>
  187.    BINARY cursors give you back the data in the native binary
  188.    representation. So binary cursors will tend to be a
  189.    little faster since they suffer less conversion overhead.
  190.   </para>
  191.   <para>
  192.    As an example, if a query returns a value of one from an integer column,
  193.    you would get a string of '1' with a default cursor
  194.    whereas with a binary cursor you would get
  195.    a 4-byte value equal to control-A ('^A').
  196.    <caution>
  197.     <para>
  198.      BINARY cursors should be used carefully. User applications such
  199.      as <application>psql</application> are not aware of binary cursors
  200.      and expect data to come back in a text format.
  201.     </para>
  202.    </caution>
  203.   </para>
  204.   <para>
  205.    However, string representation is architecture-neutral whereas binary
  206.    representation can differ between different machine architectures.
  207.    Therefore, if your client machine and server machine use different
  208.    representations (e.g. "big-endian" versus "little-endian"),
  209.    you will probably not want your data returned in
  210.    binary format.
  211.    <tip>
  212.     <para>
  213.      If you intend to display the data in
  214.      ASCII,  getting it back in ASCII will save you some
  215.      effort on the client side.
  216.     </para>
  217.    </tip>
  218.   </para>
  219.   <refsect2 id="R2-SQL-DECLARE-3">
  220.    <refsect2info>
  221.     <date>1998-09-04</date>
  222.    </refsect2info>
  223.    <title>
  224.     Notes
  225.    </title>
  226.    <para>
  227.     Cursors are only available in transactions.
  228.    </para>
  229.    <para>
  230.     <productname>Postgres</productname>
  231.     does not have an explicit <command>OPEN cursor</command>
  232.     statement; a cursor is considered to be open when it is declared.
  233.     <note>
  234.      <para>
  235.       In <acronym>SQL92</acronym> cursors are only available in
  236.       embedded applications. <application>ecpg</application>, the
  237.       embedded SQL preprocessor for <productname>Postgres</productname>,
  238.       supports the <acronym>SQL92</acronym> conventions, including those
  239.       involving DECLARE and OPEN statements.
  240.      </para>
  241.     </note>
  242.    </para>
  243.   </refsect2>
  244.  </refsect1>
  245.  <refsect1 id="R1-SQL-DECLARESTATEMENT-2">
  246.   <title>
  247.    Usage
  248.   </title>
  249.   <para>
  250.    To declare a cursor:
  251.    <programlisting>
  252. DECLARE liahona CURSOR
  253.     FOR SELECT * FROM films;
  254.    </programlisting>
  255.   </para>
  256.  </refsect1>
  257.  <refsect1 id="R1-SQL-DECLARESTATEMENT-3">
  258.   <title>
  259.    Compatibility
  260.   </title>
  261.   <para>
  262.   </para>
  263.   <refsect2 id="R2-SQL-DECLARESTATEMENT-4">
  264.    <refsect2info>
  265.     <date>1998-04-15</date>
  266.    </refsect2info>
  267.    <title>
  268.     SQL92
  269.    </title>
  270.    <para>
  271.     <acronym>SQL92</acronym> allows cursors only in embedded <acronym>SQL</acronym>
  272.     and in modules. <productname>Postgres</productname> permits cursors to be used
  273.     interactively.
  274.     <acronym>SQL92</acronym> allows embedded or modular cursors to
  275.     update database information.
  276.     All <productname>Postgres</productname> cursors are readonly.
  277.     The BINARY keyword is a <productname>Postgres</productname> extension.
  278.    </para>
  279.   </refsect2>
  280.  </refsect1>
  281. </refentry>
  282. <!-- Keep this comment at the end of the file
  283. Local variables:
  284. mode: sgml
  285. sgml-omittag:nil
  286. sgml-shorttag:t
  287. sgml-minimize-attributes:nil
  288. sgml-always-quote-attributes:t
  289. sgml-indent-step:1
  290. sgml-indent-data:t
  291. sgml-parent-document:nil
  292. sgml-default-dtd-file:"../reference.ced"
  293. sgml-exposed-tags:nil
  294. sgml-local-catalogs:"/usr/lib/sgml/catalog"
  295. sgml-local-ecat-files:nil
  296. End:
  297. -->