create_trigger.sgml
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:6k
- <refentry id="SQL-CREATETRIGGER">
- <refmeta>
- <refentrytitle>
- CREATE TRIGGER
- </refentrytitle>
- <refmiscinfo>SQL - Language Statements</refmiscinfo>
- </refmeta>
- <refnamediv>
- <refname>
- CREATE TRIGGER
- </refname>
- <refpurpose>
- Creates a new trigger
- </refpurpose>
- </refnamediv>
- <refsynopsisdiv>
- <refsynopsisdivinfo>
- <date>1998-09-21</date>
- </refsynopsisdivinfo>
- <synopsis>
- CREATE TRIGGER <replaceable class="PARAMETER">name</replaceable> { BEFORE | AFTER } { <replaceable class="PARAMETER">event</replaceable> [OR ...] }
- ON <replaceable class="PARAMETER">table</replaceable> FOR EACH { ROW | STATEMENT }
- EXECUTE PROCEDURE <replaceable class="PARAMETER">ER">func</replaceable>BLE> ( <replaceable class="PARAMETER">arguments</replaceable> )
- </synopsis>
-
- <refsect2 id="R2-SQL-CREATETRIGGER-1">
- <refsect2info>
- <date>1998-09-21</date>
- </refsect2info>
- <title>
- Inputs
- </title>
- <para>
- <variablelist>
- <varlistentry>
- <term><replaceable class="parameter">name</replaceable></term>
- <listitem>
- <para>
- The name of an existing trigger.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><replaceable class="parameter">table</replaceable></term>
- <listitem>
- <para>
- The name of a table.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><replaceable class="parameter">event</replaceable></term>
- <listitem>
- <para>
- One of INSERT, DELETE or UPDATE.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><replaceable class="parameter">funcname</replaceable></term>
- <listitem>
- <para>
- A user-supplied function.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </para>
- </refsect2>
- <refsect2 id="R2-SQL-CREATETRIGGER-2">
- <refsect2info>
- <date>1998-09-21</date>
- </refsect2info>
- <title>
- Outputs
- </title>
- <para>
- <variablelist>
- <varlistentry>
- <term><computeroutput>
- CREATE
- </computeroutput></term>
- <listitem>
- <para>
- This message is returned if the trigger is successfully created.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </para>
- </refsect2>
- </refsynopsisdiv>
-
- <refsect1 id="R1-SQL-CREATETRIGGER-1">
- <refsect1info>
- <date>1998-09-21</date>
- </refsect1info>
- <title>
- Description
- </title>
- <para>
- <command>CREATE TRIGGER</command> will enter a new trigger into the current
- data base. The trigger will be associated with the relation
- <replaceable class="parameter">relname</replaceable> and will execute
- the specified function <replaceable class="parameter">funcname</replaceable>.
- </para>
- <para>
- The trigger can be specified to fire either before the
- operation is attempted on a tuple (before constraints
- are checked and the INSERT, UPDATE or DELETE is attempted) or
- after the operation has been attempted (e.g. after constraints
- are checked and the INSERT, UPDATE or DELETE has completed). If the
- trigger fires before the event, the trigger may
- skip the operation for the current tuple, or change the tuple
- being inserted (for INSERT and UPDATE operations only). If
- the trigger fires after the event, all changes, including the
- last insertion, update, or deletion, are "visible" to the trigger.
- </para>
- <para>
- Refer to the chapters on SPI and Triggers in the
- <citetitle>PostgreSQL Programmer's Guide</citetitle> for more
- information.
- </para>
- <refsect2 id="R2-SQL-CREATETRIGGER-3">
- <refsect2info>
- <date>1998-09-21</date>
- </refsect2info>
- <title>
- Notes
- </title>
- <para>
- <command>CREATE TRIGGER</command> is a <productname>Postgres</productname>
- language extension.
- </para>
- <para>
- Only the relation owner may create a trigger on this relation.
- </para>
- <para>
- As of the current release (v6.4), STATEMENT triggers are not implemented.
- </para>
- <para>
- Refer to <command>DROP TRIGGER</command> for information on how to
- remove triggers.
- </para>
- </refsect2>
- </refsect1>
- <refsect1 id="R1-SQL-CREATETRIGGER-2">
- <title>
- Usage
- </title>
- <para>
- Check if the specified distributor code exists in the distributors
- table before appending or updating a row in the table films:
- <programlisting>
- CREATE TRIGGER if_dist_exists
- BEFORE INSERT OR UPDATE ON films FOR EACH ROW
- EXECUTE PROCEDURE check_primary_key ('did', 'distributors', 'did');
- </programlisting>
- </para>
- <para>
- Before cancelling a distributor or updating its code, remove every
- reference to the table films:
- <programlisting>
- CREATE TRIGGER if_film_exists
- BEFORE DELETE OR UPDATE ON distributors FOR EACH ROW
- EXECUTE PROCEDURE check_foreign_key (1, 'CASCADE', 'did', 'films', 'did');
- </programlisting>
- </para>
- </refsect1>
- <refsect1 id="R1-SQL-CREATETRIGGER-3">
- <title>
- Compatibility
- </title>
- <para>
- </para>
-
- <refsect2 id="R2-SQL-CREATETRIGGER-4">
- <refsect2info>
- <date>1998-09-21</date>
- </refsect2info>
- <title>
- SQL92
- </title>
- <para>
- There is no <command>CREATE TRIGGER</command> in <acronym>SQL92</acronym>.
- </para>
- <para>
- The second example above may also be done by using a FOREIGN KEY
- constraint as in:
- <programlisting>
- CREATE TABLE distributors (
- did DECIMAL(3),
- name VARCHAR(40),
- CONSTRAINT if_film_exists
- FOREIGN KEY(did) REFERENCES films
- ON UPDATE CASCADE ON DELETE CASCADE
- );
- </programlisting>
- </para>
- <para>
- However, foreign keys are not yet implemented (as of version 6.4) in
- <productname>Postgres</productname>.
- </para>
- </refsect2>
- </refsect1>
- </refentry>
- <!-- Keep this comment at the end of the file
- Local variables:
- mode: sgml
- sgml-omittag:nil
- 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:
- -->