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

Matheus AlmeidaMatheus Almeida
2 min read

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ísticaProcedureFunction
Retorno diretoNão retorna valorRetorna obrigatoriamente um valor
ChamadaExecutada com EXEC ou em blocoPode ser chamada em SELECTs
Uso em queries❌ Não pode✅ Pode
Finalidade comumRealizar açõesCalcular 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.

0
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.