Como Trabalhar com Tipos de Dados Compostos em PL/SQL Oracle: Registros e Coleções
Introdução
O PL/SQL, a linguagem procedural do Oracle Database, oferece uma variedade de recursos avançados que permitem aos desenvolvedores criar aplicações robustas e de alto desempenho. Entre esses recursos estão os tipos de dados compostos, como registros e coleções, que oferecem uma maneira eficiente de armazenar e manipular múltiplos valores em uma única variável.
Este artigo discutirá em detalhes como trabalhar com registros e coleções em PL/SQL. Vamos abordar os principais conceitos, fornecer exemplos de código e demonstrar como esses tipos podem ser aplicados para resolver problemas complexos.
Registros em PL/SQL
Um registro é uma variável composta que pode conter múltiplos campos com tipos de dados potencialmente diferentes.
Definição e Uso de Registros
Vamos supor que temos uma tabela chamada empregados
com as seguintes colunas: id
, nome
e salario
.
CREATE TABLE empregados (
id NUMBER PRIMARY KEY,
nome VARCHAR2(50),
salario NUMBER(10, 2)
);
Podemos definir um tipo de registro que corresponde à estrutura dessa tabela:
DECLARE
TYPE t_empregado IS RECORD (
id NUMBER,
nome VARCHAR2(50),
salario NUMBER(10, 2)
);
meu_empregado t_empregado;
BEGIN
meu_empregado.id := 1;
meu_empregado.nome := 'Alice';
meu_empregado.salario := 5000.00;
DBMS_OUTPUT.PUT_LINE('ID: ' || meu_empregado.id);
DBMS_OUTPUT.PUT_LINE('Nome: ' || meu_empregado.nome);
DBMS_OUTPUT.PUT_LINE('Salário: ' || meu_empregado.salario);
END;
/
ID: 1
Nome: Alice
Salário: 5000.00
Registros de Tabela (ROWTYPE)
ROWTYPE é uma forma eficiente de declarar um tipo de registro que corresponde a uma linha em uma tabela existente.
DECLARE
meu_empregado empregados%ROWTYPE;
BEGIN
SELECT * INTO meu_empregado FROM empregados WHERE id = 1;
DBMS_OUTPUT.PUT_LINE('ID: ' || meu_empregado.id);
DBMS_OUTPUT.PUT_LINE('Nome: ' || meu_empregado.nome);
DBMS_OUTPUT.PUT_LINE('Salário: ' || meu_empregado.salario);
END;
/
ID: 1
Nome: John
Salário: 7000.00
Coleções em PL/SQL
Coleções são variáveis compostas que podem armazenar múltiplos elementos, semelhante a arrays em outras linguagens de programação.
Tipos de Coleções
- VARRAYs: Arrays com tamanho fixo.
- Tabelas Indexadas: Semelhantes a arrays, mas sem um tamanho fixo.
- Tabelas Aninhadas: Utilizadas para armazenar conjuntos não ordenados de elementos.
VARRAYs
DECLARE
TYPE t_numeros IS VARRAY(10) OF NUMBER;
meus_numeros t_numeros := t_numeros(1, 2, 3, 4, 5);
BEGIN
meus_numeros.EXTEND;
meus_numeros(6) := 6;
FOR i IN 1..meus_numeros.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('Número ' || i || ': ' || meus_numeros(i));
END LOOP;
END;
/
Número 1: 1
Número 2: 2
Número 3: 3
Número 4: 4
Número 5: 5
Número 6: 6
Tabelas Indexadas
DECLARE
TYPE t_index_table IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
meus_numeros t_index_table;
BEGIN
meus_numeros(1) := 10;
meus_numeros(2) := 20;
meus_numeros(3) := 30;
FOR i IN 1..meus_numeros.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('Número ' || i || ': ' || meus_numeros(i));
END LOOP;
END;
/
Número 1: 10
Número 2: 20
Número 3: 30
Tabelas Aninhadas
DECLARE
TYPE t_nested_table IS TABLE OF NUMBER;
meus_numeros t_nested_table := t_nested_table(100, 200, 300);
BEGIN
FOR i IN 1..meus_numeros.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('Número ' || i || ': ' || meus_numeros(i));
END LOOP;
END;
/
Número 1: 100
Número 2: 200
Número 3: 300
Conclusão
Tipos de dados compostos como registros e coleções oferecem uma maneira robusta e eficiente de manipular múltiplos valores dentro do PL/SQL. Eles são fundamentais para a construção de aplicações escaláveis e de alto desempenho com Oracle Database.
Este artigo foi projetado para ser um guia para entender como trabalhar com registros e coleções em PL/SQL. Espero que você ache esses exemplos e explicações úteis em seu trabalho com Oracle Database.
Abs
Referências
- Oracle Corporation, “PL/SQL User’s Guide and Reference,” Oracle Database 19c. Link