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

Como criar uma tabela aninhada como objeto de banco de dados no Oracle




Se você planeja reutilizar a tabela aninhada que deseja criar, fazer isso como um objeto de banco de dados é a melhor opção para você. Você pode armazená-los em seu banco de dados permanentemente e usá-los sempre que quiser.

Além de criar uma coleção PL/SQL do tipo tabela aninhada dentro de um bloco PL/SQL, você também pode criá-las como objeto de banco de dados e armazená-las permanentemente. Além disso, você pode reutilizá-los sempre que quiser. A tabela aninhada criada como objeto de banco de dados pode ser baseada em Tipo de Dados Primitivo ou Tipo de Dados Definido pelo Usuário. Neste tutorial vamos nos concentrar no primeiro e deixar o último para o próximo tutorial.

Como criar uma coleção de tipo de tabela aninhada com base no tipo de dados primitivo


Por tipo de dados primitivo queremos dizer os tipos de dados que são predefinidos pela linguagem e são nomeados por uma palavra-chave reservada. Você pode consultar este documento Oracle para ler mais sobre os tipos de dados PL/SQL.

As tabelas a seguir não têm restrição, índice ou qualquer coisa projetada nelas e são criadas apenas para demonstrar como criar uma tabela aninhada como objeto de banco de dados.

Etapa 1:ativar a saída do servidor

SET SERVEROUTPUT ON;

Etapa 2:criar uma coleção de tipos de tabela aninhada

CREATE OR REPLACE TYPE my_nested_table IS TABLE OF VARCHAR2 (10);
/

A instrução acima na execução bem-sucedida criará uma tabela aninhada com o nome 'my_nested_table' que será baseada no tipo de dados primitivo VARCHAR2.

Etapa 3:como usar a tabela aninhada?


O tipo de coleção que criamos acima pode ser usado para especificar o tipo de uma coluna de uma tabela.
CREATE TABLE my_subject(
	  sub_id    	NUMBER,
	  sub_name  	VARCHAR2 (20),
	  sub_schedule_day    my_nested_table
) NESTED TABLE sub_schedule_day STORE AS nested_tab_space;
/

A tabela acima é uma tabela normal, exceto que sua coluna 3 é do tipo de tabela aninhada que pode conter vários valores. Para definir uma coluna de uma tabela como tipo de tabela aninhada, você deve informar ao compilador o nome da coluna e uma tabela de armazenamento. Você pode fazer isso usando a cláusula NESTED ABLE e STORE AS, como fizemos aqui na linha número 5. Usando a cláusula NESTED TABLE especificamos o nome da coluna e usando a cláusula STORE AS especificamos a tabela de armazenamento para a tabela aninhada.

Você pode consultar o tutorial em vídeo onde eu expliquei passo a passo o processo de criação da tabela acima.

Inserir linhas na tabela

INSERT INTO my_subject (sub_id, sub_name, sub_schedule_day)
VALUES (101, 'Maths', my_nested_table('mon', 'Fri'));

Você insere linhas na tabela aninhada da mesma forma que insere na tabela normal. No entanto, para inserir dados na coluna do tipo de tabela aninhada, primeiro você deve escrever o nome da tabela aninhada que no nosso caso é 'my_nested_table' (consulte a etapa 2) e depois escrever os dados de acordo com o tipo de dados da sua tabela aninhada e coloque-o entre parênteses.

Recuperar dados da tabela


Uma simples instrução SELECT DML pode ser usada para recuperar os dados da tabela.
SELECT * FROM my_subject;

Esta simples instrução DML mostrará todos os dados armazenados na tabela que criamos acima. Para ver os dados de uma linha específica, você pode usar a cláusula WHERE com SELECT DML
SELECT * FROM my_subject WHERE sub_id = 101;

Se você quiser, pode obter ajuda da subconsulta para apenas verificar os dados da coluna que você definiu como tipo de tabela aninhada.
SELECT * FROM TABLE (
  SELECT sub_schedule_day FROM my_subject WHERE sub_id = 101
);

A consulta acima mostrará os dados do assunto que possui o ID do assunto 101 apenas da coluna sub_schedule_day. Nesta consulta usamos a expressão TABLE para abrir a instância e exibir os dados em formato relacional.

Atualizar dados da tabela


Você pode atualizar todos os valores da coluna definida como tabela aninhada ou atualizar uma única instância da mesma.

Atualize todos os valores da coluna do tipo de tabela aninhada.

UPDATE my_subject SET sub_schedule_day = my_nested_table('Tue', 'Sat') 
WHERE sub_id = 101;
/

A consulta acima atualizará todos os valores de sub_schedule_day de 'Seg', 'Sex' para 'Tue' e 'Sat'. Agora suponha que você queira atualizar apenas uma única instância desta coluna substituindo ‘Sat’ por ‘Thu’. Como você vai fazer isso?

Atualizar instância única de tabela aninhada


Para atualizar uma única instância da coluna do tipo de tabela aninhada, você pode mais uma vez obter a ajuda da expressão TABLE.
UPDATE TABLE
  (SELECT sub_schedule_day FROM my_subject 
  WHERE sub_id = 101) A
SET A.COLUMN_VALUE   = 'Thur' 
WHERE A.COLUMN_VALUE = 'Sat';

A consulta acima atualizará o valor de ‘Sat’ para ‘Thur’ na tabela.

Espero que tenha gostado da leitura e aprendido algo novo. Certifique-se de se inscrever em nosso canal, pois muitos tutoriais interessantes estão a caminho. Obrigado e tenha um ótimo dia!