Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Coleção PL/SQL:tabela aninhada no banco de dados Oracle



Como criar uma tabela aninhada dentro do bloco PL/SQL


Bem-vindo ao segundo tutorial da série PL/SQL Collection. Neste tutorial vamos aprender o primeiro tipo de Coleção que é “Tabela Aninhada”. Uma tabela dentro de uma tabela é a definição mais simples que se pode encontrar e está correta em todos os sentidos porque uma tabela que está embutida dentro de outra tabela é exatamente o que o nome tabela aninhada sugere.

Mas, se tivermos que definir a coleção 'Tabela aninhada' de uma maneira mais sofisticada e técnica, podemos dizer que as tabelas aninhadas são estruturas unidimensionais que são persistentes e ilimitadas por natureza. Eles são acessíveis tanto em SQL quanto em PL/SQL e podem ser usados ​​em tabelas, registros e definições de objetos. Como é uma coleção PL/SQL ilimitada, ela pode conter qualquer número de elementos em um conjunto ordenado aleatório.

Definição
Tabelas aninhadas são estruturas unidimensionais que são persistentes e ilimitadas por natureza. Eles são acessíveis tanto em SQL quanto em PL/SQL e podem ser usados ​​em tabelas, registros e definições de objetos. Como é uma coleção PL/SQL ilimitada, ela pode conter qualquer número de elementos em um conjunto não ordenado.

Leitura sugerida:Introdução à coleção PL/SQL

Uma tabela aninhada pode ser criada dentro do bloco PL/SQL ou no banco de dados como um objeto do tipo coleção (Schema Object). No caso da tabela aninhada anterior se comporta como um array unidimensional sem nenhum tipo de índice ou qualquer limite superior.

Então, por enquanto, vamos nos concentrar em como criar uma tabela aninhada dentro do bloco PL/SQL e deixar o resto para o próximo tutorial.

Sintaxe para criação de tabela aninhada

DECLRE 
TYPE nested_table_name IS TABLE OF element_type [NOT NULL];

Expliquei essa sintaxe em detalhes em meu tutorial em vídeo no meu canal do YouTube. Eu recomendo que você consulte esse vídeo.

Exemplo:como criar uma tabela aninhada dentro de um bloco PL/SQL?


O exemplo a seguir é apenas para demonstrar como criar uma tabela aninhada, não há nada demais nisso.
SET SERVEROUTPUT ON;
DECLARE
   TYPE my_nested_table   IS TABLE OF number;
    var_nt  my_nested_table :=  my_nested_table (9,18,27,36,45,54,63,72,81,90);
BEGIN
   DBMS_OUTPUT.PUT_LINE ('Value Stored at index 1 in NT is ' ||var_nt (1)); 
   DBMS_OUTPUT.PUT_LINE ('Value Stored at index 2 in NT is ' ||var_nt (2));
   DBMS_OUTPUT.PUT_LINE ('Value Stored at index 3 in NT is ' ||var_nt (3));
END;
 /

O exemplo acima é muito simples em que criamos uma tabela aninhada e a nomeamos 'my_nested_table' (linha número 3). Na próxima linha (linha número 4), criamos uma instância da mesma coleção e a usamos para inicializar a tabela aninhada e armazenar alguns dados nela. Na seção de execução acessamos os dados armazenados individualmente usando o número do índice, da mesma forma que costumávamos fazer em arrays.

Em vez de acessar os dados um a um manualmente usando o índice, podemos usar loops e percorrer cada elemento da tabela aninhada da coleção.
 SET SERVEROUTPUT ON;
 DECLARE
   TYPE my_nested_table   IS TABLE OF number;
   var_nt  my_nested_table :=  my_nested_table (9,18,27,36,45,54,63,72,81,90);
 BEGIN
   FOR i IN 1..var_nt.COUNT
   LOOP
     DBMS_OUTPUT.PUT_LINE ('Value stored at index '||i||'is '||var_nt(i));
   END LOOP;
 END;
 /

Esse é outro exemplo de como criar uma tabela aninhada na qual percorremos os dados e os exibimos de volta ao usuário usando For Loop.

É isso sobre como criar tabelas aninhadas em blocos PL/SQL. Fique atento pois no próximo tutorial vamos aprender como criar tabelas aninhadas como objetos de coleção de banco de dados e quais são todas as views de dicionário de dados que você pode usar para obter as informações das tabelas aninhadas que estão armazenadas em seu banco de dados.

Isso é tudo. Obrigado por ler e tenha um ótimo dia!