Skip to content

Instantly share code, notes, and snippets.

@Allanfs
Created July 30, 2020 23:04
Show Gist options
  • Save Allanfs/bfe84d78da8d8af853bac5f3c530c9ec to your computer and use it in GitHub Desktop.
Save Allanfs/bfe84d78da8d8af853bac5f3c530c9ec to your computer and use it in GitHub Desktop.
em desenvolvimento

Funções Anônimas

É um meio de executar stored procedures sem precisar criar uma no banco de dados, isso pode ser feito por qualquer usuário com acesso ao banco*.

A função anônima é feita com o comando DO e tem duas regras:

  1. não recebe parâmetros
  2. retorna void

Basicamente, é um trecho de código escrito em pl/pgsql que vai fazer alguma coisa, e não vai retornar nada. Vamos a um exemplo comentado, a função abaixo busca o pedido de hoje que não está consolidado:

do $$ -- iniciar com a palavra-chave e os caracteres de escape

-- aqui dentro é igual uma stored procedure

declare -- trecho para declaração de variáveis (opcional)

    idPedido int;

begin -- define o inicio da função.

    select id_pedido 
    from rest.pedidos 
    where not consolidado 
    and data_cadastro = current_date into idPedido;

    if idPedido is not null then
    
        raise notice '%', idPedido;
        perform func.consolidar_pedido(idPedido);
        
    end if;

    raise notice 'Finalizado';

end $$ -- finalizar com a palavra-chave e os caracteres de escape

Se você ja conhece o PL/PGSQL não vai ter muita dificuldade em ler esse trecho de código. A única diferença disto para uma stored procedure é a sua assinatura. Abaixo um exemplo de como esse mesmo trecho fosse uma.

CREATE OR REPLACE FUNCTION func.consolidar_pedido_hoje()
RETURNS void LANGUAGE plpgsql
AS $$

declare
    idPedido int;
begin
    select id_pedido 
    from rest.pedidos 
    where not consolidado 
    and data_cadastro = current_date into idPedido;

    if idPedido is not null then
    
        raise notice '%', idPedido;
        perform func.consolidar_pedido(idPedido);
        
    end if;

    raise notice 'Finalizado';
end $$;

As possibilidades com essa sintaxe são inúmeras. Desde o desenvolvimento de stored procedures, até debug das que já estão em produção. E já que não pode haver retorno, pode ser adicionado RAISE NOTICE para exibir o valor de uma variável ou o fluxo que foi seguido.

Como executar?

Simples: do mesmo modo como se fosse executar uma consulta. Um jeito bacana pra evitar erro de sintaxe pelo interpretador é selecionar todo o trecho do código e executar.

Referências

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment