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

数据库系统

开发平台:

Unix_Linux

  1. <refentry id="SQL-CREATETRIGGER">
  2.  <refmeta>
  3.   <refentrytitle>
  4.    CREATE TRIGGER
  5.   </refentrytitle>
  6.   <refmiscinfo>SQL - Language Statements</refmiscinfo>
  7.  </refmeta>
  8.  <refnamediv>
  9.   <refname>
  10.    CREATE TRIGGER
  11.   </refname>
  12.   <refpurpose>
  13.    Creates a new trigger
  14.   </refpurpose>
  15.  </refnamediv>
  16.  <refsynopsisdiv>
  17.   <refsynopsisdivinfo>
  18.    <date>1998-09-21</date>
  19.   </refsynopsisdivinfo>
  20.   <synopsis>
  21. CREATE TRIGGER <replaceable class="PARAMETER">name</replaceable> { BEFORE | AFTER } { <replaceable class="PARAMETER">event</replaceable> [OR ...] }
  22.     ON <replaceable class="PARAMETER">table</replaceable> FOR EACH { ROW | STATEMENT }
  23.     EXECUTE PROCEDURE <replaceable class="PARAMETER">ER">func</replaceable>BLE> ( <replaceable class="PARAMETER">arguments</replaceable> )
  24.   </synopsis>
  25.   
  26.   <refsect2 id="R2-SQL-CREATETRIGGER-1">
  27.    <refsect2info>
  28.     <date>1998-09-21</date>
  29.    </refsect2info>
  30.    <title>
  31.     Inputs
  32.    </title>
  33.    <para>
  34.     <variablelist>
  35.      <varlistentry>
  36.       <term><replaceable class="parameter">name</replaceable></term>
  37.       <listitem>
  38.        <para>
  39. The name of an existing trigger.
  40.        </para>
  41.       </listitem>
  42.      </varlistentry>
  43.      <varlistentry>
  44.       <term><replaceable class="parameter">table</replaceable></term>
  45.       <listitem>
  46.        <para>
  47. The name of a table.
  48.        </para>
  49.       </listitem>
  50.      </varlistentry>
  51.      <varlistentry>
  52.       <term><replaceable class="parameter">event</replaceable></term>
  53.       <listitem>
  54.        <para>
  55. One of INSERT, DELETE or UPDATE.
  56.        </para>
  57.       </listitem>
  58.      </varlistentry>
  59.      <varlistentry>
  60.       <term><replaceable class="parameter">funcname</replaceable></term>
  61.       <listitem>
  62.        <para>
  63. A user-supplied function.
  64.        </para>
  65.       </listitem>
  66.      </varlistentry>
  67.     </variablelist>
  68.    </para>
  69.   </refsect2>
  70.   <refsect2 id="R2-SQL-CREATETRIGGER-2">
  71.    <refsect2info>
  72.     <date>1998-09-21</date>
  73.    </refsect2info>
  74.    <title>
  75.     Outputs
  76.    </title>
  77.    <para>
  78.     <variablelist>
  79.      <varlistentry>
  80.       <term><computeroutput>
  81. CREATE
  82.        </computeroutput></term>
  83.       <listitem>
  84.        <para>
  85. This message is returned if the trigger is successfully created.
  86.        </para>
  87.       </listitem>
  88.      </varlistentry>
  89.     </variablelist>
  90.    </para>
  91.   </refsect2>
  92.  </refsynopsisdiv>
  93.  
  94.  <refsect1 id="R1-SQL-CREATETRIGGER-1">
  95.   <refsect1info>
  96.    <date>1998-09-21</date>
  97.   </refsect1info>
  98.   <title>
  99.    Description
  100.   </title>
  101.   <para>
  102.    <command>CREATE TRIGGER</command> will enter a new trigger into the current
  103.    data base.  The trigger will be associated with the relation
  104.    <replaceable class="parameter">relname</replaceable> and will execute
  105.    the specified function <replaceable class="parameter">funcname</replaceable>.
  106.   </para>
  107.   <para>
  108.    The trigger can be specified to  fire  either  before  the
  109.    operation is attempted on a tuple (before constraints
  110.    are checked and the INSERT, UPDATE or DELETE is attempted)  or
  111.    after  the  operation  has been attempted (e.g. after constraints
  112.    are checked and the INSERT, UPDATE or DELETE has completed).  If the
  113.    trigger fires before the event, the trigger may
  114.    skip the operation for the current tuple, or change the tuple
  115.    being  inserted  (for  INSERT and UPDATE operations only).  If
  116.    the trigger fires after the event,  all  changes,  including  the
  117.    last insertion, update, or deletion, are "visible" to the trigger.
  118.   </para>
  119.   <para>
  120.    Refer to the chapters on SPI and Triggers in the
  121. <citetitle>PostgreSQL Programmer's Guide</citetitle>  for  more
  122.    information.
  123.   </para>
  124.   <refsect2 id="R2-SQL-CREATETRIGGER-3">
  125.    <refsect2info>
  126.     <date>1998-09-21</date>
  127.    </refsect2info>
  128.    <title>
  129.     Notes
  130.    </title>
  131.    <para>
  132.     <command>CREATE TRIGGER</command> is a <productname>Postgres</productname>
  133.  language extension.
  134.    </para>
  135.    <para>
  136.     Only the relation owner may create a trigger on this relation.
  137.    </para>
  138.    <para>
  139.     As of the current release (v6.4), STATEMENT triggers are not implemented.
  140.    </para>
  141.    <para>
  142.     Refer to <command>DROP TRIGGER</command> for information on how to 
  143.     remove triggers.
  144.    </para>   
  145.   </refsect2>
  146.  </refsect1>
  147.  <refsect1 id="R1-SQL-CREATETRIGGER-2">
  148.   <title>
  149.    Usage
  150.   </title>
  151.   <para>
  152.    Check if the specified distributor code exists in the distributors
  153.    table before appending or updating a row in the table films:
  154.    <programlisting>
  155. CREATE TRIGGER if_dist_exists
  156.     BEFORE INSERT OR UPDATE ON films FOR EACH ROW
  157.     EXECUTE PROCEDURE check_primary_key ('did', 'distributors', 'did');
  158.    </programlisting>
  159.   </para>
  160.   <para>
  161.    Before cancelling a distributor or updating its code, remove every
  162.    reference to the table films:
  163.    <programlisting>
  164. CREATE TRIGGER if_film_exists 
  165.     BEFORE DELETE OR UPDATE ON distributors FOR EACH ROW
  166.     EXECUTE PROCEDURE check_foreign_key (1, 'CASCADE', 'did', 'films', 'did');
  167.    </programlisting>
  168.   </para>
  169.  </refsect1>
  170.  <refsect1 id="R1-SQL-CREATETRIGGER-3">
  171.   <title>
  172.    Compatibility
  173.   </title>
  174.   <para>
  175.   </para>
  176.   
  177.   <refsect2 id="R2-SQL-CREATETRIGGER-4">
  178.    <refsect2info>
  179.     <date>1998-09-21</date>
  180.    </refsect2info>
  181.    <title>
  182.     SQL92
  183.    </title>
  184.    <para>
  185.     There is no <command>CREATE TRIGGER</command> in <acronym>SQL92</acronym>.
  186.    </para>
  187.    <para>
  188.     The second example above may also be done by using a FOREIGN KEY
  189.     constraint as in:
  190.     <programlisting>
  191. CREATE TABLE distributors (
  192.     did      DECIMAL(3),
  193.     name     VARCHAR(40),
  194.     CONSTRAINT if_film_exists
  195.     FOREIGN KEY(did) REFERENCES films
  196.     ON UPDATE CASCADE ON DELETE CASCADE  
  197. );
  198.     </programlisting>
  199.    </para>
  200.    <para>
  201.     However, foreign keys are not yet implemented (as of version 6.4) in
  202.     <productname>Postgres</productname>.
  203.    </para>
  204.   </refsect2>
  205.  </refsect1>
  206. </refentry>
  207. <!-- Keep this comment at the end of the file
  208. Local variables:
  209. mode: sgml
  210. sgml-omittag:nil
  211. sgml-shorttag:t
  212. sgml-minimize-attributes:nil
  213. sgml-always-quote-attributes:t
  214. sgml-indent-step:1
  215. sgml-indent-data:t
  216. sgml-parent-document:nil
  217. sgml-default-dtd-file:"../reference.ced"
  218. sgml-exposed-tags:nil
  219. sgml-local-catalogs:"/usr/lib/sgml/catalog"
  220. sgml-local-ecat-files:nil
  221. End:
  222. -->