Nesse artigo vamos explorar um recurso muito útil no mundo do PL/SQL: os Tipos de Dados Ancorados. Imaginem só poder declarar variáveis sem se preocupar com o tipo exato de dados. Legal, né? É isso que vamos aprender.
O que são Tipos de Dados Ancorados?
Pense nos Tipos de Dados Ancorados como uma cola mágica. Essa “cola” gruda o tipo de uma variável nova a algo que já existe, como uma coluna de tabela ou outra variável. É como se a nova variável dissesse: “Quero ser igualzinha àquela ali”.
A Mágica por Trás
Quando usamos tipos ancorados, estamos dizendo ao Oracle: “Ei, crie uma variável para mim, mas use o mesmo tipo de dados daquela coluna da tabela ou daquela outra variável”. Isso é ótimo porque:
- Economizamos tempo: Não precisamos decorar ou procurar o tipo exato.
- Evitamos erros: Se a tabela mudar, nossa variável se adapta automaticamente.
- Deixamos o código mais limpo e fácil de entender.
Como Usar Tipos de Dados Ancorados
Vamos ver como isso funciona na prática. É mais fácil do que parece.
Sintaxe Básica
1 |
nome_da_variavel atributo_do_tipo%TYPE; |
Parece complicado? Calma, vamos quebrar isso em partes menores:
nome_da_variavel
: É o nome que você escolhe para sua variável.atributo_do_tipo
: É a coluna da tabela ou outra variável que você quer copiar.%TYPE
: É a palavrinha mágica que faz tudo funcionar.
Exemplos Práticos
Vamos usar o esquema HR que vem com o Oracle. Imaginem que queremos criar variáveis baseadas nas colunas da tabela employees
.
1 2 3 4 5 6 |
DECLARE v_nome employees.first_name%TYPE; v_salario employees.salary%TYPE; BEGIN NULL; -- Placeholder statement END; |
Neste exemplo, v_nome
terá o mesmo tipo de dados que a coluna first_name
, e v_salario
será do mesmo tipo que salary
. Fácil, não é?
Cuidados Especiais
Agora, prestem atenção nessa parte. É como andar de bicicleta: fácil, mas tem alguns detalhes importantes.
- Constraints não são copiadas de colunas de tabelas.
- Se a coluna
first_name
tiver uma constraint NOT NULL, nossa variávelv_nome
não herda isso.
- Se a coluna
- Mas, se ancorarmos em outra variável, aí a história é diferente.
- Constraints como NOT NULL são passadas adiante.
Vamos ver um exemplo que mostra essa diferença:
1 2 3 4 5 6 7 |
DECLARE v_nome_obrigatorio VARCHAR2(50) NOT NULL := 'João'; v_outro_nome v_nome_obrigatorio%TYPE; BEGIN -- Este código dará erro se não inicializarmos v_outro_nome NULL; END; |
Se rodarmos isso, o Oracle vai reclamar dizendo que v_outro_nome
precisa de um valor inicial. É como se ele dissesse: “Ei, você disse que isso não pode ser nulo, lembra?”
Você tem duas opções para corrigir esse problema:
Opção 1: Inicializar a variável v_outro_nome
1 2 3 4 5 6 |
DECLARE v_nome_obrigatorio VARCHAR2(50) NOT NULL := 'João'; v_outro_nome v_nome_obrigatorio%TYPE := 'Maria'; -- Inicializando a variável BEGIN NULL; END; |
Opção 2: Remover a restrição NOT NULL
Se você não precisa que a variável v_outro_nome
seja NOT NULL
, pode remover essa restrição do tipo base:
1 2 3 4 5 6 |
DECLARE v_nome_obrigatorio VARCHAR2(50) NOT NULL := 'João'; v_outro_nome VARCHAR2(50); -- Agora a variável pode ser nula BEGIN NULL; END; |
Explicação
- Opção 1: Ao inicializar
v_outro_nome
, garantimos que ela não será nula, satisfazendo a exigência do tipoNOT NULL
. - Opção 2: Ao remover o
NOT NULL
do tipo base, permitimos que a variávelv_outro_nome
possa ser nula.
Dica de Ouro
Sempre que possível, use tipos ancorados. Eles tornam seu código mais robusto e fácil de manter. É como construir uma casa com blocos que se ajustam automaticamente – muito mais fácil de reformar depois.
Conclusão
Os tipos de dados ancorados são como superpoderes para programadores PL/SQL. Eles nos ajudam a escrever código mais inteligente e adaptável. Da próxima vez que forem declarar variáveis, lembrem-se: com grandes poderes, vêm grandes facilidades (e menos dores de cabeça).
Agora é com você. Experimentem usar tipos ancorados nos seus códigos e vejam como fica mais fácil. Qualquer dúvida, estou aqui para ajudar. Até a próxima aula, pessoal.