DEV Community

Cover image for Desvendando SQL: Procedures
Cristian Magalhães
Cristian Magalhães

Posted on

1

Desvendando SQL: Procedures

Eae gente bonita, tudo bem com vocês? Continuando nossa série de publicações, hoje nós vamos falar sobre procedures!

O que é?

Procedures ou store procedures, é um conjunto de comandos tal qual funções que são armazenados e executados quando necessários, recebendo parâmetros ou não. É comum ser utilizada muitas vezes para reduzir o tráfego na rede, melhorar o desempenho de um banco de dados, criar tarefas agendadas, diminuir riscos, criar rotinas de processamento, etc.

As procedures são consideradas seguras por muitos porque com o seu uso nenhuma aplicação tem necessidade de ter acesso direto as tabelas.

Procedure vs Function

Bom, se você me acompanha, deve ter lido ou visto que postei um artigo falando sobre como usar function no SQL, então para que você não saia daqui com mais dúvidas, vou explicar um pouco da diferença entre os dois.

Característica Procedure Function
Retorna valor? Opcional (pode retornar conjunto de resultados) Sim (obrigatório)
Modifica dados? Sim (pode executar INSERT, UPDATE, DELETE) Não (apenas leitura)
Pode ser chamada em SELECT? Não Sim
Uso principal Executar processos complexos Retornar um cálculo ou transformação

Como usar?

Agora vamos botar a mão na massa! Aqui vou deixar o link para que você possa criar o mesmo banco de dados que o meu.

Vamos a um exemplo bem simples, vamos criar uma procedure que altera o status de todas as tarefas para pending. Porém, o status antigo será passado por parâmetro.

create or replace procedure updateStatusToPending(oldStatus varchar(50))
language plpgsql
as $$
declare
    -- Declaração de variaveis
begin
    update todos set status = 'pending' where status = oldStatus;
end
$$;
Enter fullscreen mode Exit fullscreen mode

Feito isso, agora nós temos uma procedure que altera todos os status para pending.

Diferente da function que usamos o select para chamar, aqui nós vamos usar a palavra-chave call como no exemplo abaixo:

call updateStatusToPending('completed')
Enter fullscreen mode Exit fullscreen mode

Após rodarmos esse script e consultar o banco, veremos que não existe mais nenhum todo com status completed.

É importante pontuar que na sintaxe da procedure existe um local correto para a declaração de variáveis, as mesmas não podem ser criadas em qualquer momento no script.

Vamos finalizar excluindo a procedure do nosso banco com o comando abaixo:

drop procedure updateStatusToPending
Enter fullscreen mode Exit fullscreen mode

Aqui finalizo esse breve texto sobre procedure, fique a vontade para mandar dúvidas e sugestões nos comentários.

Fontes


Se chegou até aqui, me segue la nas redes vizinhas.

thank you dog

Heroku

Deploy with ease. Manage efficiently. Scale faster.

Leave the infrastructure headaches to us, while you focus on pushing boundaries, realizing your vision, and making a lasting impression on your users.

Get Started

Top comments (0)