`

nested table

阅读更多

 

General Information
Note: A nested table is a table stored within the structure of another table.
Data Dictionary Objects
collection$ tab$ type$
dba_nested_tables all_nested_tables user_nested_tables
dba_nested_table_cols all_nested_table_cols user_nested_table_cols
dba_source all_source user_source
dba_tables all_tables user_tables
dba_tab_cols all_tab_cols user_tab_cols
dba_types all_types user_types
System Privileges
CREATE ANY TABLE CREATE TABLE DROP ANY TABLE
CREATE ANY TYPE CREATE TYPE DROP ANY TYPE
 

Nested Table Example

CREATE OR REPLACE TYPE CourseList AS TABLE OF VARCHAR2(64);
/

desc courselist

col text format a50

SELECT type, text
FROM user_source
WHERE name = 'COURSELIST';

CREATE TABLE department (
name     VARCHAR2(20),
director VARCHAR2(20),
office   VARCHAR2(20),
courses  CourseList)
NESTED TABLE courses STORE AS courses_tab;

--courses_tab是在数据库表user_nested_tables内标识department表中该索引表的名。

desc department

desc courses_tab

SELECT table_name, nested
FROM user_tables;

set linesize 121
col table_name format a20
col data_type format a30
col table_type_name format a15
col parent_table_column format a10

SELECT column_name, data_type, data_length
FROM user_tab_cols
WHERE table_name = 'DEPARTMENT';



SELECT table_name, table_type_owner, table_type_name,
parent_table_column
FROM user_nested_tables;

 

table_name table_type_owner table_type_name parent_table_column
COURSES_TAB APPS COURSELIST COURSES

 

 


Insert into Nested Table
SELECT cardinality(courses)
FROM department;

INSERT INTO department
(name, director, office, courses)
VALUES
('English', 'Lynn Saunders', 'Breakstone Hall 205', CourseList(
'Expository Writing',
'Film and Literature',
'Modern Science Fiction',
'Discursive Writing',
'Modern English Grammar',
'Introduction to Shakespeare',
'Modern Drama',
'The Short Story',
'The American Novel')
);

SELECT * FROM department;

SELECT cardinality(courses)
FROM department;

Update a nested table
DECLARE
   new_courses CourseList :=
   CourseList('Expository Writing',
   'Film and Literature',
   'Discursive Writing',
   'Modern English Grammar',
   'Realism and Naturalism',
   'Introduction to Shakespeare',
   'Modern Drama',
   'The Short Story',
   'The American Novel',
   '20th-Century Poetry',
   'Advanced Workshop in Poetry')
;
BEGIN
   UPDATE department
   SET courses = new_courses
   WHERE name = 'English';
END;
/

SELECT * FROM department;

SELECT cardinality(courses)
FROM department;

Drop nested table
SELECT table_name
FROM user_tables;

DROP TABLE courses_tab;

You cannot directly drop the storage table of a nested table. Instead, you must drop the nested table column using the ALTER TABLE ... DROP COLUMN clause.

desc department

ALTER TABLE department
DROP COLUMN courses;
 
Table Unnesting

Collection Unnesting Demo
To select data from a nested table column you use the TABLE function to treat the nested table as columns of a table. This process is called "collection unnesting".

SELECT t1.department_id, t2.*
FROM hr_info t1, TABLE(t1.people) t2
WHERE t2.department_id = t1.department_id;

SELECT t1.name, t2.*
FROM department t1, TABLE(t1.courses) t2;
 
Nested Table Demos

Constructor for a Nested Table
In the following example, you pass multiple elements to the constructor CourseList(), which returns a nested table  containing those elements:

DECLARE

TYPE CourseList IS TABLE OF VARCHAR2(16);
my_courses CourseList;

BEGIN
my_courses := CourseList('Econ 2010','Acct 3401','Mgmt 3100');
END;
/

Because a PL/SQL table does not have a declared maximum size, you can put as many elements in the constructor as necessary.

DECLARE

TYPE CourseList IS TABLE OF VARCHAR2(16);
my_courses CourseList;

BEGIN
  my_courses := CourseList('Econ 2010','Acct 3401','Mgmt 3100');
  my_courses := CourseList('Math 2022','Acct 3431','Mgmt 3100');
  my_courses := CourseList('Phys 2299','Chem 9876');
  my_courses := CourseList('Food 9999');
  my_courses := CourseList('Orcl 3456','Math 3434','Hist 1040');
END;
/
Defining a Type as a database object CREATE OR REPLACE TYPE CourseList AS TABLE OF VARCHAR2(64);
/
Defining Types in a package header CREATE OR REPLACE PACKAGE xyz IS
 TYPE CourseList IS TABLE OF VARCHAR2(64);

 TYPE PartNum IS TABLE OF parent.part_num%TYPE
 INDEX BY BINARY_INTEGER;
END xyz;
/

 

 

   

 

分享到:
评论

相关推荐

    oracle nested table demo

    它支持多种高级数据结构,其中就包括嵌套表(Nested Table)。嵌套表是一种特殊类型的集合类型,允许在一个列中存储一组行,这些行可以是同一种类型的数据。本示例“Oracle Nested Table Demo”将向我们展示如何在...

    Oracle三种集合数据类型的比较

    Oracle数据库系统提供了多种数据类型,其中包括了三种主要的集合数据类型:VARRAY(变量数组)、NESTED TABLE(嵌套表)和 Associative Array(关联数组,也称为INDEX BY TABLE)。这三种集合数据类型在存储和操作一...

    oracle数组实现

    这些方法主要涉及自定义类型的使用,包括PL/SQL中的嵌套表(nested table)、索引表(indexed table)以及VARARRAY类型。 ### Oracle数组实现概述 在Oracle数据库中,数组是一种非常有用的数据结构,用于存储相同类型...

    Oracle.表与锁

    首先,Oracle支持多种类型的表,包括Heap Organized Table(HOT)、Index Organized Table(IOT)、Temporary Table、Index/Hash Clustered Table、Nested Table、Object Table以及External Table。HOT是最常见的表...

    oracle 用表结构创建 type

    - **NESTED TABLE**:用于表示可排序的数组。 ### 二、创建Type的方法 #### 1. 使用CREATE OR REPLACE TYPE语句 这是最基本的创建Type的方式,可以直接指定Type的结构。例如,创建一个简单的对象类型: ```sql ...

    Oracle PLSQL集合

    SELECT * FROM some_table WHERE some_column IN (SELECT * FROM TABLE(t_nested_var)); ``` #### 12.5 嵌套表的集合操作 Oracle 10g引入了新的特性,使得嵌套表可以像集合一样进行操作,支持集合操作如合并、交集...

    oracle 自定义数据结构和表类型实验

    Oracle提供了两种主要的集合类型:VARRAY(固定大小数组)和NESTED TABLE(可变大小表格)。VARRAY有固定的元素数量限制,而NESTED TABLE则可以动态增长。 例如,你可以创建一个存储PersonType对象的VARRAY类型: ...

    plsql中的集合3剑客详解

    在PL/SQL中,Oracle提供了三种集合类型,它们分别是联合数组(Associative Array)、内嵌表(Nested Table)和索引表(Index-By Table),这些类型为处理和操作一维数据提供了强大的工具。让我们逐一深入理解这三种...

    The Unified Modeling Language Reference Manual, Second Edition

    The document contains a complete nested table of contents in the Adobe Reader bookmark pane. Click the bookmark tab if necessary to open this pane. Click on a bookmark to jump quickly to a section of ...

    Spring Nested事务简单案例

    首先,我们来看`table.sql`文件,这通常包含用于创建数据库表的SQL语句,可能是为了演示Nested事务如何影响数据。在Spring中,事务管理器会根据配置决定何时开始和结束事务,以及如何处理异常。当数据库表的结构与...

    SQL集合嵌套表varray

    在SQL中,集合嵌套表(Collection Nested Table)和VARRAY(Variable Array)是两种用于存储复杂数据结构的数据类型,特别是在处理多值列或者数组类型数据时非常有用。本篇文章将详细探讨这两种数据类型,以及它们在...

    Pro.CSS.Techniques

    Additionally, a whole new generation of web developers are appearing on the scene, many of whom have never had the grave displeasure of dealing with nested table layouts and spacer GIFs.So how are ...

    第四章ORACLE表管理.ppt

    4.7 嵌套表(Nested Table) 嵌套表是指将一个表嵌套在另一个表中的表类型,用于存储复杂的关系数据。 4.8 其他表 除了上述表类型外,还有其他一些特殊的表类型,如外部表、临时表等。 掌握各种类型的表的创建...

    table嵌套table边框样式

    <table class="nested"> <table class="inner"> <!-- 内容 --> </table> </table> ``` 对应的CSS类可以这样写: ```css .nested { border: 1px dashed #gray; border-collapse: separate; } .nested...

    第四章 ORACLE表管理.pptx

    * 嵌套表(Nested Table):嵌套表是将一个表嵌套在另一个表中,用于存储复杂数据。 五、ORACLE 表的创建方法 ORACLE 表的创建方法包括 CREATE TABLE 语句和 CREATE INDEX 语句。 * CREATE TABLE 语句:用于创建...

    Oracle知识之集合和成员函数.pptx

    创建嵌套表的完整过程包括:使用`CREATE TYPE`创建类型,使用`AS TABLE OF`基于该类型创建新的类型,以及使用`CREATE TABLE`创建嵌套表,其中包含`NESTED TABLE ... STORE AS`关键字。 可变数组(Variable-Size ...

    oracle 高级教程 深入学习集合!

    常见的集合类型包括`VARRAY(可变数组)`和`NESTED TABLE(嵌套表)`。它们在处理大量相似数据时提供了一种高效的方式。 2. **VARRAY(可变数组)** VARRAY是一种固定大小的集合,可以将它理解为数据库中的动态...

    某公司内部总结sql优化方法

    4. **Nested Table(嵌套表)的使用**: 对于需要频繁读取的数据集,可以一次性加载到内存中的嵌套表中,提高后续查询速度。例如,可以定义一个类型为表的变量,然后使用BULK COLLECT INTO语句一次性填充数据。 5....

Global site tag (gtag.js) - Google Analytics