# 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:

```sql
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:

```sql
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.
