Procedures vs Functions em PL/SQL: quando usar cada uma?

Se você trabalha com PL/SQL, já deve ter se perguntado: qual a diferença entre uma procedure e uma function? E mais importante: quando usar cada uma?
Neste post, vou te mostrar as diferenças práticas com exemplos reais — sem enrolação.
🔍 Diferença principal
Característica | Procedure | Function |
Retorno direto | Não retorna valor | Retorna obrigatoriamente um valor |
Chamada | Executada com EXEC ou em bloco | Pode ser chamada em SELECTs |
Uso em queries | ❌ Não pode | ✅ Pode |
Finalidade comum | Realizar ações | Calcular e retornar algo |
✅ Quando usar procedure?
Use procedures quando você quiser executar uma ação que pode envolver várias operações, como:
Inserções em múltiplas tabelas
Atualizações em massa
Envio de logs ou notificações
Execuções agendadas (jobs)
📌 Exemplo:
CREATE OR REPLACE PROCEDURE registrar_log(p_mensagem IN VARCHAR2) AS
BEGIN
INSERT INTO logs (mensagem, data_registro)
VALUES (p_mensagem, SYSDATE);
END;
✅ Quando usar function?
Use functions quando precisar calcular e retornar um valor, especialmente se for usar dentro de queries.
Calcular diferença de datas
Transformar ou formatar dados
Verificar regras (validações simples)
📌 Exemplo:
CREATE OR REPLACE FUNCTION idade_em_anos(p_data_nascimento IN DATE) RETURN NUMBER AS
BEGIN
RETURN TRUNC(MONTHS_BETWEEN(SYSDATE, p_data_nascimento) / 12);
END;
⚠️ Cuidados ao usar functions
Evite funções com inserções, updates ou deletes (efeitos colaterais)
Não use funções pesadas em grandes SELECTs — pode impactar a performance
Functions usadas em WHERE ou JOIN precisam ser otimizadas
🧠 Dica prática
Se a rotina modifica dados ou só executa comandos, vá de procedure.
Se a rotina precisa ser usada dentro de uma query ou retornar um valor, vá de function.
Conclusão
Entender quando usar procedure ou function melhora a performance, a organização do código e a legibilidade do seu PL/SQL. Use cada uma no seu contexto ideal — e seu sistema agradece!
Se curtiu esse conteúdo, me segue aqui ou no LinkedIn! Em breve trago mais dicas práticas de PL/SQL e desenvolvimento backend real-oficial.
Subscribe to my newsletter
Read articles from Matheus Almeida directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Matheus Almeida
Matheus Almeida
Desenvolvedor focado em PL/SQL, Java, Angular e qualidade de código.