diff options
Diffstat (limited to 'doc/src/sgml/ref/do.sgml')
-rw-r--r-- | doc/src/sgml/ref/do.sgml | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/doc/src/sgml/ref/do.sgml b/doc/src/sgml/ref/do.sgml new file mode 100644 index 0000000..96901b7 --- /dev/null +++ b/doc/src/sgml/ref/do.sgml @@ -0,0 +1,135 @@ +<!-- +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> |