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

Coleções Oracle PL/SQL - Criar tabela aninhada no banco de dados


No Oracle, uma tabela aninhada pode ser armazenada como uma coluna de banco de dados. Isso significa que toda a tabela aninhada está contida em uma linha da tabela do banco de dados e cada linha do banco de dados pode conter uma tabela aninhada diferente. Para armazenar uma tabela aninhada no banco de dados, você deve usar o CREATE TYPE para criar o tipo de tabela aninhada, em vez de uma instrução de tipo em um bloco PL/SQL.

Usando CREATE TYPE , o tipo é armazenado no dicionário de dados e, portanto, está disponível para uso como um tipo de coluna. O exemplo a seguir ilustra como criar uma tabela aninhada como uma coluna de banco de dados.

Oracle PL/SQL - Criando Tabela Aninhada no Banco de Dados

CREATE TYPE BookObj AS OBJECT (
title VARCHAR2(40),
author VARCHAR2(40),
catalog_number NUMBER(4)
);

CREATE TYPE BookList AS TABLE OF BookObj;

CREATE TABLE course_material (
department CHAR(3),
course NUMBER(3),
required_reading BookList )
NESTED TABLE required_reading STORE AS required_tab;

Há várias coisas a serem observadas sobre a listagem acima e a criação de tabelas aninhadas no banco de dados:
  • O tipo de tabela é projetado com o CREATE TYPE declaração para que possa ser armazenada no dicionário de dados.
  • O tipo de tabela é usado na definição da tabela, assim como um objeto de coluna.
  • Para cada tabela aninhada em uma determinada tabela de banco de dados, a  NESTED TABLE cláusula é obrigatória. Esta cláusula indica o nome da tabela de armazenamento.

Uma tabela de armazenamento é uma tabela gerada pelo sistema que é usada para armazenar os dados reais na tabela aninhada. Esses dados não são armazenados em linha com o restante das colunas da tabela; ele é armazenado separadamente.

A required_reading coluna irá armazenar um REF na required_tab tabela, onde a lista de livros será armazenada. Para cada linha de course_material , required_reading contém uma REF para as linhas correspondentes em required_tab.

NOTA


A tabela de armazenamento (required_tab no exemplo acima) pode existir em outro esquema e pode ter parâmetros de armazenamento diferentes da tabela principal. A tabela de armazenamento pode ser descrita e existe em user_tables , mas não pode ser acessado diretamente.

Se você tentar consultar ou modificar a tabela de armazenamento diretamente, receberá o erro Oracle "ORA-22812:não pode fazer referência à tabela de armazenamento da coluna da tabela aninhada". O conteúdo da tabela de armazenamento é manipulado por meio de SQL na tabela principal.

Veja também:
  • Oracle PL/SQL – Coleções (tabelas aninhadas)