DO

DO — executa um bloco de código anônimo

Sinopse

DO [ LANGUAGE nome_da_linguagem ] código

Descrição

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.

Parâmetros

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.

Notas

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.

Exemplos

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

Conformidade

Não existe o comando DO no padrão SQL.

Veja também

CREATE LANGUAGE


[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.)