| <!-- |
| doc/src/sgml/ref/call.sgml |
| PostgreSQL documentation |
| --> |
| |
| <refentry id="sql-call"> |
| <indexterm zone="sql-call"> |
| <primary>CALL</primary> |
| </indexterm> |
| |
| <refmeta> |
| <refentrytitle>CALL</refentrytitle> |
| <manvolnum>7</manvolnum> |
| <refmiscinfo>SQL - Language Statements</refmiscinfo> |
| </refmeta> |
| |
| <refnamediv> |
| <refname>CALL</refname> |
| <refpurpose>invoke a procedure</refpurpose> |
| </refnamediv> |
| |
| <refsynopsisdiv> |
| <synopsis> |
| CALL <replaceable class="parameter">name</replaceable> ( [ <replaceable class="parameter">argument</replaceable> ] [, ...] ) |
| </synopsis> |
| </refsynopsisdiv> |
| |
| <refsect1> |
| <title>Description</title> |
| |
| <para> |
| <command>CALL</command> executes a procedure. |
| </para> |
| |
| <para> |
| If the procedure has any output parameters, then a result row will be |
| returned, containing the values of those parameters. |
| </para> |
| </refsect1> |
| |
| <refsect1> |
| <title>Parameters</title> |
| |
| <variablelist> |
| <varlistentry> |
| <term><replaceable class="parameter">name</replaceable></term> |
| <listitem> |
| <para> |
| The name (optionally schema-qualified) of the procedure. |
| </para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><replaceable class="parameter">argument</replaceable></term> |
| <listitem> |
| <para> |
| An argument expression for the procedure call. |
| </para> |
| |
| <para> |
| Arguments can include parameter names, using the syntax |
| <literal><replaceable class="parameter">name</replaceable> => <replaceable class="parameter">value</replaceable></literal>. |
| This works the same as in ordinary function calls; see |
| <xref linkend="sql-syntax-calling-funcs"/> for details. |
| </para> |
| |
| <para> |
| Arguments must be supplied for all procedure parameters that lack |
| defaults, including <literal>OUT</literal> parameters. However, |
| arguments matching <literal>OUT</literal> parameters are not evaluated, |
| so it's customary to just write <literal>NULL</literal> for them. |
| (Writing something else for an <literal>OUT</literal> parameter |
| might cause compatibility problems with |
| future <productname>PostgreSQL</productname> versions.) |
| </para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </refsect1> |
| |
| <refsect1> |
| <title>Notes</title> |
| |
| <para> |
| The user must have <literal>EXECUTE</literal> privilege on the procedure in |
| order to be allowed to invoke it. |
| </para> |
| |
| <para> |
| To call a function (not a procedure), use <command>SELECT</command> instead. |
| </para> |
| |
| <para> |
| If <command>CALL</command> is executed in a transaction block, then the |
| called procedure cannot execute transaction control statements. |
| Transaction control statements are only allowed if <command>CALL</command> |
| is executed in its own transaction. |
| </para> |
| |
| <para> |
| <application>PL/pgSQL</application> handles output parameters |
| in <command>CALL</command> commands differently; |
| see <xref linkend="plpgsql-statements-calling-procedure"/>. |
| </para> |
| </refsect1> |
| |
| <refsect1> |
| <title>Examples</title> |
| <programlisting> |
| CALL do_db_maintenance(); |
| </programlisting> |
| </refsect1> |
| |
| <refsect1> |
| <title>Compatibility</title> |
| |
| <para> |
| <command>CALL</command> conforms to the SQL standard, |
| except for the handling of output parameters. The standard |
| says that users should write variables to receive the values |
| of output parameters. |
| </para> |
| </refsect1> |
| |
| <refsect1> |
| <title>See Also</title> |
| |
| <simplelist type="inline"> |
| <member><xref linkend="sql-createprocedure"/></member> |
| </simplelist> |
| </refsect1> |
| </refentry> |