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 emuser_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)