<REFENTRY ID="SQL-BEGINWORK">
 <REFMETA>
  <REFENTRYTITLE>
   BEGIN WORK
  </REFENTRYTITLE>
  <REFMISCINFO>SQL - Language Statements</REFMISCINFO>
 </REFMETA>
 <REFNAMEDIV>
  <REFNAME>
   BEGIN WORK
  </REFNAME>
  <REFPURPOSE>
   Begins a transaction
  </REFPURPOSE>
  
  
 <REFSYNOPSISDIV>
  <REFSYNOPSISDIVINFO>
   <DATE>1998-04-15</DATE>
  </REFSYNOPSISDIVINFO>
  <SYNOPSIS>  
   BEGIN { WORK | TRANSACTION }
  </SYNOPSIS>
  
  <REFSECT2 ID="R2-SQL-BEGINWORK-1">
   <REFSECT2INFO>
    <DATE>1998-04-15</DATE>
   </REFSECT2INFO>
   <TITLE>
    Inputs
   </TITLE>
   <PARA>
   </PARA>
   <VARIABLELIST>
    <VARLISTENTRY>
     <TERM>
      <ReturnValue>
       None
      </ReturnValue>
     </TERM>
     <LISTITEM>
      <para></para>
     </LISTITEM>
    </varlistentry>
   </VARIABLELIST>
  </REFSECT2>
  
  <REFSECT2 ID="R2-SQL-BEGINWORK-2">
   <REFSECT2INFO>
    <DATE>1998-04-15</DATE>
   </REFSECT2INFO>
   <TITLE>
    Outputs
   </TITLE>
   <PARA>
   </PARA>
   <VARIABLELIST>
    <VARLISTENTRY>
     <TERM>
      status
     </TERM>
     <LISTITEM>
      <PARA>
       <VARIABLELIST>
	<VARLISTENTRY>
	 <TERM>
	  <ReturnValue>BEGIN</ReturnValue>
	 </TERM>
	 <LISTITEM>
	  <PARA>
	   This signifies that a new transaction has been started.
	  </PARA>
	 </LISTITEM>
	</VARLISTENTRY>
	<VARLISTENTRY>
	 <TERM>
	  <ReturnValue>
	   NOTICE:  BeginTransactionBlock and not in default state
	  </ReturnValue>
	 </TERM>
	 <LISTITEM>
	  <PARA>
	   This indicates that a transaction was already in progress.
	   <comment>
	    What happens to command queries already run
	    in the transaction?  Does this have no effect, or does
	    it restart the transaction?
	   </comment>
	  </PARA>
	 </LISTITEM>
	</VARLISTENTRY>
       </variablelist>
      </para>
     </LISTITEM>
    </VARLISTENTRY>
   </VARIABLELIST>
  </REFSECT2>
 </REFSYNOPSISDIV>
 
 <REFSECT1 ID="R1-SQL-BEGINWORK-1">
  <REFSECT1INFO>
   <DATE>1998-04-15</DATE>
  </REFSECT1INFO>
  <TITLE>
   Description
  </TITLE>
  <para>
   BEGIN begins a user transaction which PostgreSQL will
   guarantee is serialisable with respect to all concurrently
   executing transactions. PostgreSQL uses two-phase locking
   to perform this task. If the transaction is committed,
   PostgreSQL will ensure either that all updates are done orelse
   that none of
   them are done. Transactions have the standard ACID
   (atomic, consistent, isolatable, and durable) property.
  </para>
  
  <REFSECT2 ID="R2-SQL-BEGINWORK-3">
   <REFSECT2INFO>
    <DATE>1998-04-15</DATE>
   </REFSECT2INFO>
   <TITLE>
    Notes
   </TITLE>
   <PARA>
    The keyword TRANSACTION is just a cosmetic alternative to WORK.
    Neither keyword need be specified.
   </PARA>
   
   <PARA>
    BEGIN statement is a PostgreSQL language extension.
   </PARA>
   
   <PARA>
    Refer to the LOCK statement for further information about locking
    tables inside a transaction.
   </PARA>
   
   <PARA>
    Use COMMIT or ROLLBACK to terminate a transaction.
   </PARA>
  </REFSECT2>
  
 <REFSECT1 ID="R1-SQL-BEGINWORK-2">
  <TITLE>
   Usage
  </TITLE>
  <PARA>To begin a user transaction:
  </PARA>
  <ProgramListing>
   BEGIN WORK;
  </ProgramListing>
 </REFSECT1>
 
 <REFSECT1 ID="R1-SQL-BEGINWORK-3">
  <TITLE>
   Compatibility
  </TITLE>
  <PARA>
  </PARA>
  
  <REFSECT2 ID="R2-SQL-BEGINWORK-4">
     <REFSECT2INFO>
    <DATE>1998-04-15</DATE>
   </REFSECT2INFO>
   <TITLE>
    SQL92
   </TITLE>
   <PARA> 
    There is no explicit "BEGIN WORK" in SQL92; transaction initiation
    is always implicit and it terminates either with a COMMIT or with
    a ROLLBACK statement.
   </PARA>
  </refsect2>
 </refsect1>
</REFENTRY>
 
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
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:
-->
