DO — executa um bloco de código anônimo
DO [ LANGUAGEnome_da_linguagem]código
O comando DO executa um bloco de código anônimo ou,
em outras palavras, uma função anônima transitória em uma linguagem
procedural.
[147]
O bloco de código é tratado como se fosse o corpo de uma função sem
parâmetros, retornando void.
É analisado e executado uma única vez.
A cláusula opcional LANGUAGE pode ser escrita
antes ou depois do bloco de código.
código
O código a ser executado na linguagem procedural.
Deve ser especificado como um literal de cadeia de caracteres,
assim como em CREATE FUNCTION.
Recomenda-se o uso de um literal delimitado por cifrão.
nome_da_linguagem
O nome da linguagem procedural em que o código está escrito.
Se omitido, o padrão é plpgsql.
A linguagem procedural a ser utilizada já deve ter sido instalada no
banco de dados corrente por meio do comando
CREATE EXTENSION.
A linguagem plpgsql é instalada por padrão,
mas outras linguagens não.
O usuário deve ter o privilégio USAGE para a
linguagem procedural, ou deve ser um superusuário se a linguagem não
for confiável.
Este é o mesmo requisito de privilégio para criar uma função na
linguagem.
Se o comando DO for executado em um bloco de
transação, o código do procedimento não poderá executar instruções
de controle de transação.
As instruções de controle de transação são permitidas apenas se o
comando DO for executado em sua própria transação.
Concessão de todos os privilégios em todas as visões no esquema
public para a função de banco de dados
(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$$;
Exemplo 85. Exemplo do tradutor
Bloco de código anônimo
Este exemplo usa um bloco de código anônimo para mostrar a data e hora corrente.
DO $$
DECLARE
agora TIMESTAMP;
BEGIN
SELECT CURRENT_TIMESTAMP INTO agora;
RAISE NOTICE 'Data e hora: %', agora;
END $$ LANGUAGE plpgsql;
NOTA: Data e hora: 2026-03-18 16:53:24.12775
DO
Não existe o comando DO no padrão
SQL.
[147] A instrução de bloco anônimo PL/SQL é uma instrução executável que pode conter instruções de controle PL/SQL e instruções SQL. Pode ser usado para implementar lógica procedural em uma linguagem de script. Em contextos PL/SQL, esta instrução pode ser compilada e executada pelo servidor de banco de dados Db2®. A instrução de bloco anônimo, que não persiste no banco de dados, pode consistir em até três seções: uma seção de declaração opcional, uma seção executável obrigatória, e uma seção de exceção opcional. IBM DB2 12.1.x — Anonymous block statement (PL/SQL) (N. T.)