DO

|           DO           |                       |            |                  |                                    |
|:----------------------:|-----------------------|------------|------------------|------------------------------------|
|[Prev](sql-discard.html)|[Up](sql-commands.html)|SQL Commands|[Home](index.html)| [Next](sql-drop-access-method.html)|

---

[]()[]()

## DO

DO — execute an anonymous code block

## Synopsis

```
DO [ LANGUAGE lang_name ] code

```

## Description

`DO` executes an anonymous code block, or in other words a transient anonymous function in a procedural language.

 The code block is treated as though it were the body of a function with no parameters, returning `void`. It is parsed and executed a single time.

 The optional `LANGUAGE` clause can be written either before or after the code block.

## Parameters

*`code`*

 The procedural language code to be executed. This must be specified as a string literal, just as in `CREATE FUNCTION`. Use of a dollar-quoted literal is recommended.

*`lang_name`*

 The name of the procedural language the code is written in. If omitted, the default is `plpgsql`.

## Notes

 The procedural language to be used must already have been installed into the current database by means of `CREATE EXTENSION`. `plpgsql` is installed by default, but other languages are not.

 The user must have `USAGE` 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.

 If `DO` is executed in a transaction block, then the procedure code cannot execute transaction control statements. Transaction control statements are only allowed if `DO` is executed in its own transaction.

## Examples

 Grant all privileges on all views in schema `public` to role `webuser`:

```
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$$;

```

## Compatibility

 There is no `DO` statement in the SQL standard.

## See Also

[CREATE LANGUAGE](sql-createlanguage.html)

---

|[Prev](sql-discard.html)|[Up](sql-commands.html)| [Next](sql-drop-access-method.html)|
|:-----------------------|:---------------------:|-----------------------------------:|
|        DISCARD         |  [Home](index.html)   |         DROP ACCESS METHOD         |

 // \<![CDATA[ \<-- For SVG support if ('WebSocket' in window) { (function() { function refreshCSS() { var sheets = [].slice.call(document.getElementsByTagName("link")); var head = document.getElementsByTagName("head")[0]; for (var i = 0; i \< sheets.length; ++i) { var elem = sheets[i]; head.removeChild(elem); var rel = elem.rel; if (elem.href && typeof rel != "string" || rel.length == 0 || rel.toLowerCase() == "stylesheet") { var url = elem.href.replace(/(&|\\?)\_cacheOverride=\\d+/, ''); elem.href = url + (url.indexOf('?') \>= 0 ? '&' : '?') + '\_cacheOverride=' + (new Date().valueOf()); } head.appendChild(elem); } } var protocol = window.location.protocol === 'http:' ? 'ws://' : 'wss://'; var address = protocol + window.location.host + window.location.pathname + '/ws'; var socket = new WebSocket(address); socket.onmessage = function(msg) { if (msg.data == 'reload') window.location.reload(); else if (msg.data == 'refreshcss') refreshCSS(); }; console.log('Live reload enabled.'); })(); } // ]]\>