[Oracle] 第17章 集合-嵌套表


  • 嵌套表是一种类似于索引表的结构,也可以用于保存多个数据,而且也可以保存复合类型的数据。

  • 嵌套表指的是在一个数据表定义时同时加入其它内部表的定义,这一概念是在 。 可以使用 SQL 进行访问,也可以进行动态扩展。

  • 创建嵌套表类型
CREATE [OR REPLACE] TYPE TYPE_NAME 
AS | IS TABLE OF DATA_TYPE [NOT NULL]; 
  • 创建表指定嵌套表存储空间名称

定义

CREATE TABLE TABLE_NAME(
    COL_NAME1 COL_TYPE,
    COL_NAME2 COL_TYPE,
    ...
    NESTED_TABLE_COL NESTED_TABLE_TYPE
)
NESTEDED TABLE NESTED_TABLE_COL 
AS STORAGE_TABLESPACE_NAME;
  • 简单嵌套表

创建嵌套表类型

 CREATE OR REPLACE TYPE PROJECT_NESTED 
 IS TABLE OF VARCHAR2(50) NOT NULL;

创建嵌套表


CREATE TABLE DEPARTMENT(
    DID         NUMBER,
    DEPTNAME    VARCHAR2(200) NOT NULL,
    PROJECTS    PROJECT_TYPE,
    CONSTRAINT OK_DID IS PRIMARY KEY(DID)
)
NESTED TABLE PROJECTS 
AS PROJECT_NESTED_TABLE;

插入数据

INSERT INTO DEPARTMENT
(DID, DEPTNAME, PROJECTS)
VALUES
(10,'MLKJ',PROJECT_NESTED('JAVA','Andriod'));
COMMIT;

INSERT INTO DEPARTMENT
(DID, DEPTNAME, PROJECTS)
VALUES
(20,'MLKJ出版社',PROJECT_NESTED('JAVA','JAVA WEB'));
COMMIT;

查看数据

SELECT * FROM TABLE(
SELECT PROJECTS FROM DEPARMENT WHERE DID = 20)

更新数据

UPDATE TABLE(SELECT PROJECTS FROM DEPARMENT WHERE DID = 20) PRO
   SET VALUE(PRO) = 'ORACLE'
 WHERE PRO.COLUMN_VALUE = 'JAVA';
COMMIT;

删除数据

DELETE FROM 
       TABLE(SELECT PROJECTS FROM DEPARMENT WHERE DID = 20) PRO
 WHERE PRO.COLUMN_VALUE = 'JAVA WEB';
COMMIT;
  • 复杂嵌套表

创建对象

CREATE OR REPLACE TYPE PROJECT_TYPE AS OBJECT
(
    PROJECTID       NUMBER,
    PROJECTNAME     VARCHAR2(50),
    PROJECTFUNDS    NUMBER(18,6),
    PUBDATE         DATE
);

创建嵌套表类型

CREATE OR REPLACE TYPE PROJECT_NESTED 
 IS TABLE OF PROJECT_TYPE NOT NULL;

创建嵌套表


CREATE TABLE DEPARTMENT(
    DID         NUMBER,
    DEPTNAME    VARCHAR2(200) NOT NULL,
    PROJECTS    PROJECT_TYPE,
    CONSTRAINT OK_DID IS PRIMARY KEY(DID)
)
NESTED TABLE PROJECTS 
AS PROJECT_NESTED_TABLE;

插入数据

INSERT INTO DEPARTMENT
(DID, DEPTNAME, PROJECTS)
VALUES
(10,'MLKJ',
PROJECT_NESTED(
    PROJECT_TYPE(1,'java',1000,date'2016-01-01'),
    PROJECT_TYPE(2,'java web',1011,date'2016-02-01'),
    PROJECT_TYPE(3,'oracle,4500,date'2016-03-01')));
COMMIT;

查看数据

SELECT * FROM TABLE(
SELECT PROJECTS FROM DEPARMENT WHERE DID = 10)

修改数据

UPDATE TABLE(SELECT PROJECTS FROM DEPARMENT WHERE DID = 10) PRO
   SET VALUE(PRO) = PROJECT_TYPE(1,'java',5000,date'2016-01-01')
 WHERE PRO.PROJECT_ID = 1;
COMMIT;

删除数据

DELETE FROM 
       TABLE(SELECT PROJECTS FROM DEPARMENT WHERE DID = 10) PRO
 WHERE PRO.PROJECT_ID = 1;
COMMIT;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值