# TYPES em PL/SQL: o que são, como funcionam e quando usar?

Se você já se deparou com `TYPE` em um código PL/SQL e não entendeu muito bem pra que servia, fica tranquilo! Neste post vou te mostrar, com exemplos, como os TYPES funcionam, quando eles fazem diferença e como usar com segurança em sistemas reais.

---

## 🧠 O que são TYPES em PL/SQL?

`TYPE` é uma forma de **definir um tipo de dado personalizado**. Pode ser usado para:

* Criar **tipos escalares** (como alias para tipos simples)
    
* Definir **registros (records)** com múltiplos campos
    
* Criar **coleções (arrays)**, como tabelas ou listas
    

Eles ajudam a **organizar dados**, deixar o código mais legível e facilitar a manipulação de conjuntos de informações.

---

## 📦 Tipos mais comuns

| Tipo | Para que serve | Exemplo |
| --- | --- | --- |
| Escalar | Alias para tipo simples | `TYPE t_id IS NUMBER;` |
| Record | Conjunto de campos (como um struct) | `TYPE t_pessoa IS RECORD (...)` |
| TABLE ou VARRAY | Lista de registros ou valores | `TYPE t_lista IS TABLE OF ...` |

---

## ✅ Exemplo 1: TYPE escalar

```sql
DECLARE
  TYPE t_codigo IS NUMBER(5);
  v_cod t_codigo;
BEGIN
  v_cod := 101;
END;
```

🔹 Útil quando você quer reaproveitar um tipo com mais clareza e consistência.

---

## ✅ Exemplo 2: TYPE RECORD (tipo registro)

```sql
DECLARE
  TYPE t_usuario IS RECORD (
    id_usuario   NUMBER,
    nome         VARCHAR2(100),
    email        VARCHAR2(100)
  );

  v_user t_usuario;
BEGIN
  v_user.id_usuario := 1;
  v_user.nome := 'João';
  v_user.email := 'joao@email.com';
END;
```

🔹 Ótimo para **representar uma linha de tabela** ou dados compostos.

---

## ✅ Exemplo 3: TYPE TABLE (coleção de registros)

```sql
DECLARE
  TYPE t_lista_nomes IS TABLE OF VARCHAR2(50);
  v_nomes t_lista_nomes := t_lista_nomes('Ana', 'Bruno', 'Carlos');
BEGIN
  FOR i IN 1 .. v_nomes.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE(v_nomes(i));
  END LOOP;
END;
```

🔹 Muito útil para **passar listas como parâmetro** para procedures ou para processar coleções em loops.

---

## ⚙️ Onde usar TYPES?

* Dentro de procedures, functions ou packages
    
* Para **representar linhas de cursor**
    
* Para **devolver coleções** de dados
    
* Para **organizar parâmetros de entrada e saída**
    

---

## 🧩 Dica real de uso

Se você tem procedures que recebem muitos parâmetros, considere usar um `RECORD TYPE` para agrupá-los. Fica mais limpo, legível e fácil de manter.

---

## 🚫 Cuidados ao usar TYPES

* **TYPES locais** (dentro de procedures) **não podem ser usados fora delas**
    
* Se quiser reutilização global, declare no `PACKAGE SPEC`
    
* Evite tipos complexos desnecessários se um simples `VARCHAR2` resolver
    

---

## Conclusão

Usar `TYPE` em PL/SQL é uma forma poderosa de escrever código mais organizado, seguro e reutilizável. Eles facilitam a leitura, reduzem erros e são ideais para trabalhar com dados estruturados e coleções.

---

Se você curtiu esse conteúdo e quer mais dicas práticas de PL/SQL, me segue aqui ou no LinkedIn. E compartilha com aquele colega que vive fazendo `SELECT *` sem `TYPE` 😅
