数据库中嵌套表

来源:互联网 发布:手机突然没有4g网络 编辑:程序博客网 时间:2024/05/18 01:31
为了让嵌套表类型能在数据表中使用,要求嵌套表类型必须保存到数据字典中,
因此要使用CREATE TYPE语句创建一个持久的嵌套表类型。
--创建嵌套表类型
CREATE TYPE empname_type IS TABLE OF VARCHAR2(20);
--创建数据表时指定嵌套表列,同时要使用STORE AS 指定嵌套表的存储表
CREATE TABLE dept_nested
(deptno NUMBER(2),--部门编号
 dname  VARCHAR2(20),--部门名称
 emplist empname_type    --部门员工列表
)NESTED TABLE emplist STORE AS empname_table;
步骤一:使用CREATE TYPE定义一个嵌套表类型,在定义了类型之后,类型被保存到Oracle
数据字典中,以便向对待普通的列一样来使用表类型。
步骤二:在定义了嵌套表类型后,可以像使用普通的列一样使用嵌套表类型,但是在数据表
定义的末尾要使用NESTED TABLE 语句给嵌套表指明一个存储表的名字,用来存储嵌套表里
的数据。
表中嵌套表列的内容是单独进行存放的,ORACLE将嵌套表列的内容存储到创建表时指定的存储
表中。数据库表中的列实际上是指向对存储表的一个引用,类似于一个REF变量。存储表中的
内容是不能直接进行访问的,必须通过SQL语句来操纵存储表中的数据。
DECLARE
    emp_list empname_type := empname_type('史密斯','杰克','马丁','斯大林','布什','小平');
BEGIN
    --可以在INSERT语句中传入一个嵌套表实例
    INSERT INTO dept_nested
          VALUES(10,'国务院',emp_list);
    --也可以直接在INSERT语句中实例化嵌套表
    INSERT INTO dept_nested
          VALUES(20,'财务司',empname_type('李林','张杰','马新','蔡文'));
    --从数据库表中查询出嵌套表实例
    SELECT emplist INTO emp_list FROM dept_nested WHERE deptno = 10;
    --对嵌套表进行更新,然后使用UPDATE语句将嵌套表实例更新回数据库
    emp_list(1) := '少校';
    emp_list(2) := '大校';
    emp_list(3) := '大校';
    emp_list(4) := '大校';
    emp_list(5) := '大校';
    emp_list(6) := '大校';
    --使用更改过的emp_list更新嵌套表列
    UPDATE dept_nested
       SET emplist = emp_list
     WHERE deptno = 10;                        
END;
删除数据字典中的嵌套表类型,可以使用DROP TYPE语句,
DROP TYPE empname_type;