/
githubmirror
/
postgres
Обзор
Документация
Войти
/
githubmirror
/
postgres
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
doc/src/sgml/ref/do.sgml
135 строк
4 KB
Peter Eisentraut
doc: Remove unused title ids
13 мар 2020, 17:45
13 мар 2020, 17:45
340de72
Код
Авторство
О чём код?
<!-- doc/src/sgml/ref/do.sgml PostgreSQL documentation --> <refentry id="sql-do"> <indexterm zone="sql-do"> <primary>DO</primary> </indexterm> <indexterm zone="sql-do"> <primary>anonymous code blocks</primary> </indexterm> <refmeta> <refentrytitle>DO</refentrytitle> <manvolnum>7</manvolnum> <refmiscinfo>SQL - Language Statements</refmiscinfo> </refmeta> <refnamediv> <refname>DO</refname> <refpurpose>execute an anonymous code block</refpurpose> </refnamediv> <refsynopsisdiv> <synopsis> DO [ LANGUAGE <replaceable class="parameter">lang_name</replaceable> ] <replaceable class="parameter">code</replaceable> </synopsis> </refsynopsisdiv> <refsect1> <title>Description</title> <para> <command>DO</command> executes an anonymous code block, or in other words a transient anonymous function in a procedural language. </para> <para> The code block is treated as though it were the body of a function with no parameters, returning <type>void</type>. It is parsed and executed a single time. </para> <para> The optional <literal>LANGUAGE</literal> clause can be written either before or after the code block. </para> </refsect1> <refsect1> <title>Parameters</title> <variablelist> <varlistentry> <term><replaceable class="parameter">code</replaceable></term> <listitem> <para> The procedural language code to be executed. This must be specified as a string literal, just as in <command>CREATE FUNCTION</command>. Use of a dollar-quoted literal is recommended. </para> </listitem> </varlistentry> <varlistentry> <term><replaceable class="parameter">lang_name</replaceable></term> <listitem> <para> The name of the procedural language the code is written in. If omitted, the default is <literal>plpgsql</literal>. </para> </listitem> </varlistentry> </variablelist> </refsect1> <refsect1> <title>Notes</title> <para> The procedural language to be used must already have been installed into the current database by means of <command>CREATE EXTENSION</command>. <literal>plpgsql</literal> is installed by default, but other languages are not. </para> <para> The user must have <literal>USAGE</literal> privilege for the procedural language, or must be a superuser if the language is untrusted. This is the same privilege requirement as for creating a function in the language. </para> <para> If <command>DO</command> is executed in a transaction block, then the procedure code cannot execute transaction control statements. Transaction control statements are only allowed if <command>DO</command> is executed in its own transaction. </para> </refsect1> <refsect1 id="sql-do-examples"> <title>Examples</title> <para> Grant all privileges on all views in schema <literal>public</literal> to role <literal>webuser</literal>: <programlisting> DO $$DECLARE r record; BEGIN FOR r IN SELECT table_schema, table_name FROM information_schema.tables WHERE table_type = 'VIEW' AND table_schema = 'public' LOOP EXECUTE 'GRANT ALL ON ' || quote_ident(r.table_schema) || '.' || quote_ident(r.table_name) || ' TO webuser'; END LOOP; END$$; </programlisting></para> </refsect1> <refsect1> <title>Compatibility</title> <para> There is no <command>DO</command> statement in the SQL standard. </para> </refsect1> <refsect1> <title>See Also</title> <simplelist type="inline"> <member><xref linkend="sql-createlanguage"/></member> </simplelist> </refsect1> </refentry>