Add note pointing out the difference in semantics between Oracle and
plpgsql EXCEPTION blocks.
This commit is contained in:
parent
35a5fb6863
commit
82fde1aaa8
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$PostgreSQL: pgsql/doc/src/sgml/plpgsql.sgml,v 1.44 2004/08/08 00:50:58 tgl Exp $
|
$PostgreSQL: pgsql/doc/src/sgml/plpgsql.sgml,v 1.45 2004/08/08 22:40:46 tgl Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<chapter id="plpgsql">
|
<chapter id="plpgsql">
|
||||||
@ -2647,7 +2647,7 @@ show errors;
|
|||||||
<para>
|
<para>
|
||||||
The <literal>show errors</literal> command does not exist in
|
The <literal>show errors</literal> command does not exist in
|
||||||
<productname>PostgreSQL</>, and is not needed since errors are
|
<productname>PostgreSQL</>, and is not needed since errors are
|
||||||
reported automatically.
|
reported automatically.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
@ -3009,7 +3009,8 @@ $$ LANGUAGE plpgsql;
|
|||||||
<para>
|
<para>
|
||||||
The exception names supported by <application>PL/pgSQL</> are
|
The exception names supported by <application>PL/pgSQL</> are
|
||||||
different from Oracle's. The set of built-in exception names
|
different from Oracle's. The set of built-in exception names
|
||||||
is much larger (see <xref linkend="errcodes-appendix">).
|
is much larger (see <xref linkend="errcodes-appendix">). There
|
||||||
|
is not currently a way to declare user-defined exception names.
|
||||||
</para>
|
</para>
|
||||||
</callout>
|
</callout>
|
||||||
</calloutlist>
|
</calloutlist>
|
||||||
@ -3032,6 +3033,38 @@ $$ LANGUAGE plpgsql;
|
|||||||
<productname>PostgreSQL</productname>.
|
<productname>PostgreSQL</productname>.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<sect3 id="plpgsql-porting-exceptions">
|
||||||
|
<title>Implicit Rollback after Exceptions</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
In <application>PL/pgSQL</>, when an exception is caught by an
|
||||||
|
<literal>EXCEPTION</> clause, all database changes since the block's
|
||||||
|
<literal>BEGIN</> are automatically rolled back. That is, the behavior
|
||||||
|
is equivalent to what you'd get in Oracle with
|
||||||
|
|
||||||
|
<programlisting>
|
||||||
|
BEGIN
|
||||||
|
SAVEPOINT s1;
|
||||||
|
... code here ...
|
||||||
|
EXCEPTION
|
||||||
|
WHEN ... THEN
|
||||||
|
ROLLBACK TO s1;
|
||||||
|
... code here ...
|
||||||
|
WHEN ... THEN
|
||||||
|
ROLLBACK TO s1;
|
||||||
|
... code here ...
|
||||||
|
END;
|
||||||
|
</programlisting>
|
||||||
|
|
||||||
|
If you are translating an Oracle procedure that uses
|
||||||
|
<command>SAVEPOINT</> and <command>ROLLBACK TO</> in this style,
|
||||||
|
your task is easy: just omit the <command>SAVEPOINT</> and
|
||||||
|
<command>ROLLBACK TO</>. If you have a procedure that uses
|
||||||
|
<command>SAVEPOINT</> and <command>ROLLBACK TO</> in a different way
|
||||||
|
then some actual thought will be required.
|
||||||
|
</para>
|
||||||
|
</sect3>
|
||||||
|
|
||||||
<sect3>
|
<sect3>
|
||||||
<title><command>EXECUTE</command></title>
|
<title><command>EXECUTE</command></title>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user