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

Como criar uma tabela aninhada usando o tipo de dados definido pelo usuário no banco de dados Oracle




Ei pessoal! Hoje vamos aprender como criar uma coleção de tipos de tabelas aninhadas usando o tipo de dados definido pelo usuário. Espero que você tenha gostado do último tutorial onde aprendemos o processo de criação de tabelas aninhadas com tipo de dados primitivos. Eu sugiro que você dê uma olhada nesse tutorial, pois vamos usar os conceitos de lá.

Semelhante ao tipo de dados primitivo, uma tabela aninhada também pode ser criada usando tipos de dados definidos pelo usuário. Para a demonstração usaremos o usuário Oracle Object. Objetos não requerem introdução, se você já estudou conceitos de POO. No Oracle, como em outras linguagens de programação, o tipo de objeto é um tipo de dado que funciona da mesma forma que outros tipos de dados como Char, Varchar2, Number etc., mas com mais flexibilidade.

Para criar um Oracle Object, usamos nossa antiga e confiável instrução ‘Create Type’.
CREATE OR REPLACE TYPE object_type AS OBJECT (
  obj_id  NUMBER,
  obj_name  VARCHAR2(10)
);
/

A instrução acima criará um objeto oracle com o nome 'tipo de objeto' com dois atributos obj_id e obj_name na execução bem-sucedida. Esse tipo de dados pode ser usado para criar uma tabela aninhada.
CREATE OR REPLACE TYPE My_NT IS TABLE OF object_type;
/

Eu acho que se você verificou o último tutorial, você achará esta declaração acima muito familiar, exceto o tipo de elemento que é um tipo de dados primitivo lá. Aqui usamos um tipo de dados definido pelo usuário que é um Oracle Object.

A declaração acima foi explicada em detalhes no último tutorial que você pode conferir aqui.

O que significa criar uma tabela aninhada usando o Oracle Object?


Sempre que você cria uma tabela aninhada usando um objeto Oracle, os atributos do objeto se tornam as colunas dessa tabela. Por exemplo, em nosso caso, criamos uma tabela aninhada ‘My_NT’ usando o tipo de dados definido pelo usuário que é um objeto Oracle ‘Object_Type’ que possui dois atributos obj_id e obj_name. Esses dois atributos do objeto atuarão como as colunas da tabela. A imagem a seguir ajudará você a entender isso com mais clareza.



Agora que criamos a tabela aninhada usando o tipo de dados definido pelo usuário, é hora de colocá-la em prática.
CREATE TABLE Base_Table(
  tab_id  NUMBER,
  tab_ele My_NT
)NESTED TABLE tab_ele STORE AS stor_tab_1;
/

A tabela acima chamada 'Base_Table' é simples que tem 2 colunas 'tab_id' e 'tab_ele'. A primeira coluna é do tipo de dados numérico, enquanto a segunda coluna é do tipo tabela aninhada. Isso significa que a segunda coluna contém uma tabela e essa tabela é nossa tabela aninhada 'My_Nt'

Embora esta 'Base_Table' seja uma tabela simples, mas uma de suas colunas contém uma tabela aninhada nela, o que levanta algumas questões como:

Como inserir dados na tabela? Como atualizar os dados da tabela? Ou como recuperar os dados da tabela? Vamos tentar descobrir as respostas para todas essas perguntas, uma de cada vez.

Como inserir dados na tabela aninhada?


Sim, concordo que inserir dados em uma tabela que tenha uma coluna do tipo tabela aninhada pode ser complicado, mas de alguma forma temos que encontrar a maneira de fazê-lo. Como uma tabela sem dados não nos serve. Direita? Vamos ver como podemos fazer isso.
 INSERT INTO base_table (tab_id, tab_ele) VALUES
 (801,  -- value for 1st colum 
   My_NT (object_type (1,'Superman') -- values for 2nd column )
 );

Como você pode ver nesta instrução INSERT, tudo é igual a um Insert DML normal, exceto a linha número 3 onde estamos inserindo dados na segunda coluna da tabela. Para inserir dados na coluna que é do tipo Tabela Aninhada, primeiro você deve escrever o nome da sua tabela aninhada que neste caso é 'My_NT', então você deve escrever o nome do seu Objeto Oracle que aqui é 'Object_Type' seguido pelos valores que você deseja inserir em sua tabela. Não se esqueça de combinar os parênteses para o nome da tabela e o nome do objeto, caso contrário, você receberá um erro.

Como atualizar os valores da tabela aninhada?

UPDATE base_table SET tab_ele = My_NT(object_type(1,'SpiderMan')) WHERE tab_id = 801; 

A instrução DML acima atualizará os valores de acordo com a execução bem-sucedida.

Como recuperar dados da tabela aninhada?


Você pode simplesmente executar a instrução Select em sua tabela para obter os dados.
Select tab_id, tab_ele FROM base_table;

A imagem a seguir mostrará o resultado retornado desta tabela.



Como você pode ver, esta instrução SELECT mostrará os dados das colunas que são do tipo de dados primário, mas apenas o nome de sua tabela aninhada junto com o objeto Oracle da coluna que você define como um tipo de tabela aninhada. Você pode facilmente superar esse problema usando a expressão TABLE como esta.
SELECT * FROM TABLE(
  SELECT tab_ele FROM Base_Table WHERE tab_id = 801
)

A execução bem-sucedida da consulta acima mostrará os dados da segunda coluna da sua tabela 'Base_Table' em um formato relacional.



É isso por este tutorial espero que tenham gostado e aprendido algo novo. Certifique-se de se inscrever e se inscrever. Tenha um ótimo dia!