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

数据库系统

开发平台:

Unix_Linux

  1. <refentry id="SQL-CREATESEQUENCE">
  2.  <refmeta>
  3.   <refentrytitle>
  4.    CREATE SEQUENCE
  5.   </refentrytitle>
  6.   <refmiscinfo>SQL - Language Statements</refmiscinfo>
  7.  </refmeta>
  8.  <refnamediv>
  9.   <refname>
  10.    CREATE SEQUENCE
  11.   </refname>
  12.   <refpurpose>
  13.    Creates a new sequence number generator
  14.   </refpurpose>
  15.  </refnamediv> 
  16.  <refsynopsisdiv>
  17.   <refsynopsisdivinfo>
  18.    <date>1998-04-15</date>
  19.   </refsynopsisdivinfo>
  20.   <synopsis>
  21. CREATE SEQUENCE <replaceable class="parameter">seqname</replaceable>
  22.     [ INCREMENT <replaceable class="parameter">increment</replaceable> ]
  23.     [ MINVALUE  <replaceable class="parameter">minvalue</replaceable> ]
  24.     [ MAXVALUE  <replaceable class="parameter">maxvalue</replaceable> ]
  25.     [ START     <replaceable class="parameter">start</replaceable> ]
  26.     [ CACHE     <replaceable class="parameter">cache</replaceable> ]
  27.     [ CYCLE ]
  28.   </synopsis>
  29.   
  30.   <refsect2 id="R2-SQL-CREATESEQUENCE-1">
  31.    <refsect2info>
  32.     <date>1998-09-11</date>
  33.    </refsect2info>
  34.    <title>
  35.     Inputs
  36.    </title>
  37.    <para>
  38.     <variablelist>
  39.      <varlistentry>
  40.       <term><replaceable class="parameter">seqname</replaceable></term>
  41.       <listitem>
  42.        <para>
  43. The name of a sequence to be created.
  44.        </para>
  45.       </listitem>
  46.      </varlistentry>
  47.      <varlistentry>
  48.       <term><replaceable class="parameter">increment</replaceable></term>
  49.       <listitem>
  50.        <para>
  51. The
  52. <option>INCREMENT <replaceable class="parameter">increment</replaceable></option>
  53. clause is optional. A positive value will make an
  54. ascending sequence, a negative one a descending sequence.
  55. The default value is one (1).
  56.        </para>
  57.       </listitem>
  58.      </varlistentry>
  59.      <varlistentry>
  60.       <term><replaceable class="parameter">minvalue</replaceable></term>
  61.       <listitem>
  62.        <para>
  63. The optional clause <option>MINVALUE
  64.  <replaceable class="parameter">minvalue</replaceable></option>
  65. determines the minimum value
  66. a sequence can generate. The defaults are 1 and -2147483647 for
  67. ascending and descending sequences, respectively.
  68.        </para>
  69.       </listitem>
  70.      </varlistentry>
  71.      <varlistentry>
  72.       <term><replaceable class="parameter">maxvalue</replaceable></term>
  73.       <listitem>
  74.        <para>
  75. Use the optional clause <option>MAXVALUE
  76.  <replaceable class="parameter">maxvalue</replaceable></option> to
  77. determine the maximum
  78. value for the sequence. The defaults are 2147483647 and -1 for
  79. ascending and descending sequences, respectively.
  80.        </para>
  81.       </listitem>
  82.      </varlistentry>
  83.      <varlistentry>
  84.       <term><replaceable class="parameter">start</replaceable></term>
  85.       <listitem>
  86.        <para>
  87. The optional <option>START
  88.  <replaceable class="parameter">start</replaceable>
  89.  clause</option> enables the sequence to begin anywhere.
  90. The default starting value is
  91. <replaceable class="parameter">minvalue</replaceable>
  92. for ascending sequences and
  93. <replaceable class="parameter">maxvalue</replaceable>
  94. for descending ones.
  95.        </para>
  96.       </listitem>
  97.      </varlistentry>
  98.      <varlistentry>
  99.       <term><replaceable class="parameter">cache</replaceable></term>
  100.       <listitem>
  101.        <para>
  102. The <option>CACHE <replaceable class="parameter">cache</replaceable></option> option
  103. enables sequence numbers to be preallocated
  104. and stored in memory for faster access. The  minimum
  105. value is 1 (only one value can be generated at a time, i.e. no cache)
  106. and this is also the default.
  107.        </para>
  108.       </listitem>
  109.      </varlistentry>
  110.      <varlistentry>
  111.       <term>CYCLE</term>
  112.       <listitem>
  113.        <para>
  114. The optional CYCLE keyword may be used to enable the sequence
  115. to continue when the
  116. <replaceable class="parameter">maxvalue</replaceable> or
  117. <replaceable class="parameter">minvalue</replaceable> has been
  118. reached by
  119. an ascending or descending sequence respectively. If the limit is
  120. reached, the next number generated will be whatever the
  121. <replaceable class="parameter">minvalue</replaceable> or
  122. <replaceable class="parameter">maxvalue</replaceable> is,
  123. as appropriate.
  124.        </para>
  125.       </listitem>
  126.      </varlistentry>
  127.     </variablelist>
  128.    </para>
  129.   </refsect2>
  130.   <refsect2 id="R2-SQL-CREATESEQUENCE-2">
  131.    <refsect2info>
  132.     <date>1998-09-11</date>
  133.    </refsect2info>
  134.    <title>
  135.     Outputs
  136.    </title>
  137.    <para>
  138.     <variablelist>
  139.      <varlistentry>
  140.       <term><computeroutput>
  141. CREATE
  142.        </computeroutput></term>
  143.       <listitem>
  144.        <para>
  145. Message returned if the command is successful.
  146.        </para>
  147.       </listitem>
  148.      </varlistentry>
  149.      <varlistentry>
  150.       <term><computeroutput>
  151. ERROR:  Relation '<replaceable class="parameter">seqname</replaceable>' already exists
  152.        </computeroutput></term>
  153.       <listitem>
  154.        <para>
  155. If the sequence specified already exists.
  156.        </para>
  157.       </listitem>
  158.      </varlistentry>
  159.      <varlistentry>
  160.       <term><computeroutput>
  161. ERROR:  DefineSequence: MINVALUE (<replaceable class="parameter">start</replaceable>) can't be >= MAXVALUE (<replaceable class="parameter">max</replaceable>)
  162.        </computeroutput></term>
  163.       <listitem>
  164.        <para>
  165. If the specified starting value is out of range.
  166.        </para>
  167.       </listitem>
  168.      </varlistentry>
  169.      <varlistentry>
  170.       <term><computeroutput>
  171. ERROR:  DefineSequence: START value (<replaceable class="parameter">start</replaceable>) can't be < MINVALUE (<replaceable class="parameter">min</replaceable>)
  172.        </computeroutput></term>
  173.       <listitem>
  174.        <para>
  175. If the specified starting value is out of range.
  176.        </para>
  177.       </listitem>
  178.      </varlistentry>
  179.      <varlistentry>
  180.       <term><computeroutput>
  181. ERROR:  DefineSequence: MINVALUE (<replaceable class="parameter">min</replaceable>) can't be >= MAXVALUE (<replaceable class="parameter">max</replaceable>)
  182.        </computeroutput></term>
  183.       <listitem>
  184.        <para>
  185. If the minimum and maximum values are inconsistant.
  186.        </para>
  187.       </listitem>
  188.      </varlistentry>
  189.     </variablelist>
  190.    </para>
  191.   </refsect2>
  192.  </refsynopsisdiv>
  193.  <refsect1 id="R1-SQL-CREATESEQUENCE-1">
  194.   <refsect1info>
  195.    <date>1998-09-11</date>
  196.   </refsect1info>
  197.   <title>
  198.    Description
  199.   </title>
  200.   <para>
  201.    <command>CREATE SEQUENCE</command> will enter a new sequence number generator
  202.    into the current data base. This involves creating and initialising a
  203.    new single-row
  204.    table with the name <replaceable class="parameter">seqname</replaceable>.
  205.    The generator will be "owned" by the user issuing the command.
  206.   </para>
  207.   <para>
  208.    After a sequence is created, you may use the function
  209.    <function>nextval(<replaceable class="parameter">seqname</replaceable>)</function>
  210.    to get a new number from the sequence.
  211.    The function
  212.    <function>currval('<replaceable class="parameter">seqname</replaceable>')</function>
  213.    may be used to determine the number returned by the last call to
  214.    <function>nextval(<replaceable class="parameter">seqname</replaceable>)</function>
  215.    for the specified sequence in the current session.
  216.    The function
  217.    <function>setval('<replaceable class="parameter">seqname</replaceable>',
  218.     <replaceable class="parameter">newvalue</replaceable>)</function>
  219.    may be used to set the current value of the specified sequence.
  220.    The next call to 
  221.    <function>nextval(<replaceable class="parameter">seqname</replaceable>)</function>
  222.    will return the given value plus the sequence increment.
  223.   </para>
  224.   <para>
  225.    Use a query like
  226.    <programlisting>
  227. SELECT * FROM sequence_name;
  228.    </programlisting>
  229.    to get the parameters of a sequence.
  230.    Aside from fetching the original
  231.    parameters, you can use
  232.    <programlisting>
  233. SELECT last_value FROM sequence_name;
  234.    </programlisting>
  235.    to obtain the last value allocated by any backend.
  236.    parameters, you can use
  237.   </para>
  238.   <para>
  239.    Low-level locking is used to enable multiple simultaneous
  240.    calls to a generator.
  241.   </para>
  242.   <caution>
  243.    <para>
  244.     Unexpected results may be obtained if a cache setting greater than one
  245.     is used for a sequence object that will be used concurrently by multiple
  246.     backends.  Each backend will allocate "cache" successive sequence values
  247.     during one access to the sequence object and increase the sequence
  248.     object's last_value accordingly.  Then, the next cache-1 uses of nextval
  249.     within that backend simply return the preallocated values without touching
  250.     the shared object.  So, numbers allocated but not used in the current session
  251.     will be lost.  Furthermore, although multiple backends are guaranteed to
  252.     allocate distinct sequence values, the values may be generated out of
  253.     sequence when all the backends are considered.  (For example, with a cache
  254.     setting of 10, backend A might reserve values 1..10 and return nextval=1, 
  255.     then
  256.     backend B might reserve values 11..20 and return nextval=11 before backend
  257.     A has generated nextval=2.)  Thus, with a cache setting of one it is safe
  258.     to assume that nextval values are generated sequentially; with a cache
  259.     setting greater than one you should only assume that the nextval values
  260.     are all distinct, not that they are generated purely sequentially.
  261.     Also, last_value will reflect the latest value reserved by any backend,
  262.     whether or not it has yet been returned by nextval.
  263.    </para>
  264.   </caution>
  265.   <refsect2 id="R2-SQL-CREATESEQUENCE-3">
  266.    <refsect2info>
  267.     <date>1998-09-11</date>
  268.    </refsect2info>
  269.    <title>
  270.     Notes
  271.    </title>
  272.    <para>
  273.     Refer to the <command>DROP SEQUENCE</command> statement to remove a sequence.
  274.    </para>
  275.    <para>
  276.     Each backend uses its own cache to store allocated numbers.
  277.     Numbers that are cached but not used in the current session will be
  278.     lost, resulting in "holes" in the sequence.
  279.    </para>
  280.   </refsect2>
  281.  </refsect1>
  282.  <refsect1 id="R1-SQL-CREATESEQUENCE-2">
  283.   <title>
  284.    Usage
  285.   </title>
  286.   <para>
  287.    Create an ascending sequence called <literal>serial</literal>, starting at 101:
  288.   </para>
  289.   <programlisting>
  290. CREATE SEQUENCE serial START 101;
  291.   </programlisting>
  292.   <para>
  293.    Select the next number from this sequence
  294.    <programlisting>
  295. SELECT NEXTVAL ('serial');
  296.     
  297. nextval
  298. -------
  299.     114
  300.    </programlisting>
  301.   </para>
  302.   <para>
  303.    Use this sequence in an INSERT:
  304.    <programlisting>
  305. INSERT INTO distributors VALUES (NEXTVAL('serial'),'nothing');
  306.    </programlisting>
  307.   </para>
  308.   <para>
  309.    Set the sequence value after a COPY FROM:
  310.    <programlisting>
  311. CREATE FUNCTION distributors_id_max() RETURNS INT4
  312.     AS 'SELECT max(id) FROM distributors' 
  313.     LANGUAGE 'sql';
  314. BEGIN;
  315.     COPY distributors FROM 'input_file';
  316.     SELECT setval('serial', distributors_id_max());
  317. END;
  318.    </programlisting>
  319.   </para>
  320.  </refsect1>
  321.  <refsect1 id="R1-SQL-CREATESEQUENCE-3">
  322.   <title>
  323.    Compatibility
  324.   </title>
  325.   <para>
  326.    <command>CREATE SEQUENCE</command> is a <productname>Postgres</productname>
  327.    language extension.
  328.   </para>
  329.   <refsect2 id="R2-SQL-CREATESEQUENCE-4">
  330.    <refsect2info>
  331.     <date>1998-09-11</date>
  332.    </refsect2info>
  333.    <title>
  334.     SQL92
  335.    </title>
  336.    <para>
  337.     There is no <command>CREATE SEQUENCE</command> statement
  338.     in <acronym>SQL92</acronym>.
  339.    </para>
  340.   </refsect2>
  341.  </refsect1>
  342. </refentry>
  343. <!-- Keep this comment at the end of the file
  344. Local variables:
  345. mode: sgml
  346. sgml-omittag:nil
  347. sgml-shorttag:t
  348. sgml-minimize-attributes:nil
  349. sgml-always-quote-attributes:t
  350. sgml-indent-step:1
  351. sgml-indent-data:t
  352. sgml-parent-document:nil
  353. sgml-default-dtd-file:"../reference.ced"
  354. sgml-exposed-tags:nil
  355. sgml-local-catalogs:"/usr/lib/sgml/catalog"
  356. sgml-local-ecat-files:nil
  357. End:
  358. -->