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.