/
githubmirror
/
postgres
Обзор
Документация
Войти
/
githubmirror
/
postgres
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
doc/src/sgml/ref/call.sgml
133 строки
3 KB
Tom Lane
Reconsider the handling of procedure OUT parameters.
11 июн 2021, 00:11
11 июн 2021, 00:11
e56bce5
Код
Авторство
О чём код?
<!-- 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>