Oracle复杂嵌套表创建与操作

一 复杂嵌套表概述

   复杂嵌套表字段数据类型包括常用类型,对象类型,变长数组类型,嵌套表类型。本篇文章详细介绍了各个类型的典型使用及嵌套表的DDL和DML操作。

二 复杂嵌套表实例

1)创建集合类型和对象类型

创建数据类型创建语句
嵌套表1create type scott.tab1_type as table of varchar2(50);
嵌套表2create or replace type scott.tab2_type as table of varchar2(50);
对象类型create or replace type scott.obj_nest_t as object(id number,name varchar2(50),salary float);
变长数组create or replace type scott.val_type as varray(10) of number;

2)创建嵌套表

创建嵌套表中有两个字段为嵌套类型:

create table scott.test_nested_tab(
person scott.obj_nest_t,sex nchar(3),
score scott.val_type,birthday date,
hobby scott.tab1_type,
character scott.tab2_type) 
nested table hobby  store as test_person;  
   执行后发现报错:ORA-22913: must specify table name for nested table column or attribute

说明:该创建嵌套表SQl语句不符合规定,嵌套表中只能有一个嵌套表类型字段
创建嵌套表中有一个字段为嵌套表类型:

create table scott.test_nested_tab(
person scott.obj_nest_t,sex nchar(3),
score scott.val_type,birthday date,
hobby scott.tab1_type) 
nested table hobby store as test_hob;
创建嵌套表在oracle日志表现为:
    76  create table "SCOTT"."TEST_HOB" OF "SCOTT"."TAB1_TYPE"  TABLESPACE "USERS";
   169 create table scott.test_nested_tab(person scott.obj_nest_t,sex nchar(3),score                              
          scott.val_type,birthday date,hobby scott.tab1_type) nested table hobby store as test_hob;

备注:在oracle日志中创建嵌套表语句的用户名为SCOTT,表名为TEST_HOB。

3)显示嵌套表结构

   desc scott.test_nested_tab;
    Name                       Null?    Type
    ----------------------------------------- -------- ----------------------------
    PERSON                         SCOTT.OBJ_NEST_T
    SEX                            NCHAR(3)
    SCORE                            SCOTT.VAL_TYPE
    BIRTHDAY                        DATE
    HOBBY                            SCOTT.TAB1_TYPE

4) 添加表数据

   insert into scott.test_nested_tab values(SCOTT.OBJ_NEST_T(1,'鹏飞',3005.05),'男 ',SCOTT.VAL_TYPE(1,2,3,4,5),to_date('1986-9-13','yyyy-mm- dd'),SCOTT.TAB1_TYPE('听歌','看书','旅游','玩游戏'));
   添加嵌套表数据在oracle日志表现为:
          66  insert into "SCOTT"."TEST_HOB"("COLUMN_VALUE") values ('听歌');
          66  insert into "SCOTT"."TEST_HOB"("COLUMN_VALUE") values ('看书');
          66  insert into "SCOTT"."TEST_HOB"("COLUMN_VALUE") values ('旅游');
          69  insert into "SCOTT"."TEST_HOB"("COLUMN_VALUE") values ('玩游戏');
   备注:以上四条日志添加语句操作表TEST_HOB。
          179 insert into "SCOTT"."TEST_NESTED_TAB"("PERSON","SEX","SCORE","BIRTHDAY") values (Unsupported Type,'男  ',Unsupported Type,TO_DATE('1986-09-13 12:00:00', 'YYYY-MM-DD HH:MI:SS'));
   备注:上一句日志添加语句操作表TEST_NESTED_TAB。

5)更改表数据

  update scott.test_nested_tab p set p.person.id=2,p.person.name='佳诺',p.person.salary=400,sex='女 ',score=SCOTT.VAL_TYPE(2,4,6,8,9),birthday=to_date('1990-2-2','yyyy-mm- dd'),HOBBY=SCOTT.TAB1_TYPE('看书','旅游','听歌','聊天') where p.person.id=1;
   更改嵌套表数据在oracle日志表现为:
          388 update "SCOTT"."TEST_NESTED_TAB" a set a."PERSON" = Unsupported Type, a."SEX" = '女  ', a."SCORE" = Unsupported Type, a."BIRTHDAY" = TO_DATE('1990-02-02 12:00:00', 'YYYY-MM-DD HH:MI:SS') where a."PERSON" = Unsupported Type and a."SEX" = '男  ' and a."SCORE" = Unsupported Type and a."BIRTHDAY" = TO_DATE('1986-09-13 12:00:00', 'YYYY-MM-DD HH:MI:SS') and a.ROWID = 'AABropAAJAAAlR0AAA';
   备注:上一句日志更改语句操作表TEST_NESTED_TAB。
          66  insert into "SCOTT"."TEST_HOB"("COLUMN_VALUE") values ('看书');
          66  insert into "SCOTT"."TEST_HOB"("COLUMN_VALUE") values ('旅游');
          66  insert into "SCOTT"."TEST_HOB"("COLUMN_VALUE") values ('听歌');
          66  insert into "SCOTT"."TEST_HOB"("COLUMN_VALUE") values ('聊天');
          97  delete from "SCOTT"."TEST_HOB" where "COLUMN_VALUE" = '听歌' and ROWID = 'AABroqAAJAAAlRsAAA';
          97  delete from "SCOTT"."TEST_HOB" where "COLUMN_VALUE" = '看书' and ROWID = 'AABroqAAJAAAlRsAAB';
          97  delete from "SCOTT"."TEST_HOB" where "COLUMN_VALUE" = '旅游' and ROWID = 'AABroqAAJAAAlRsAAC';
          100 delete from "SCOTT"."TEST_HOB" where "COLUMN_VALUE" = '玩游戏' and ROWID = 'AABroqAAJAAAlRsAAD';
   备注:嵌套表集合有数据,oracle处理更改嵌套表集合时先添加你所更改后的嵌套集合的数据 ,然后删除更改前的嵌套集合的数据。

6)–查看表数据

   select * from scott.test_nested_tab;

   PERSON(ID, NAME, SALARY)    SEX       SCORE                BIRTHDAY          HOBBY
   --------------------------------------------------------------------------------
   OBJ_NEST_T(2, '佳诺', 400)   女     VAL_TYPE(2, 4, 6, 8, 9)  02-FEB-90  TAB1_TYPE('看书', '旅游', '听歌', '聊天')

7)删除表数据

   delete from scott.test_nested_tab p where p.person.id=2;
   删除嵌套表数据在oracle日志表现为:
          240 delete from "SCOTT"."TEST_NESTED_TAB" a where a."PERSON" = Unsupported Type and a."SEX" = '女  ' and a."SCORE" = Unsupported Type and a."BIRTHDAY" = TO_DATE('1990-02-02 12:00:00', 'YYYY-MM-DD HH:MI:SS') and a.ROWID = 'AABropAAJAAAlR0AAA';
          97  delete from "SCOTT"."TEST_HOB" where "COLUMN_VALUE" = '看书' and ROWID = 'AABroqAAJAAAlRsAAE';
          97  delete from "SCOTT"."TEST_HOB" where "COLUMN_VALUE" = '旅游' and ROWID = 'AABroqAAJAAAlRsAAF';
          97  delete from "SCOTT"."TEST_HOB" where "COLUMN_VALUE" = '听歌' and ROWID = 'AABroqAAJAAAlRsAAG';
          97  delete from "SCOTT"."TEST_HOB" where "COLUMN_VALUE" = '聊天' and ROWID = 'AABroqAAJAAAlRsAAH';

8)删除表

   drop table scott.test_nested_tab;
   删除嵌套表在oracle日志表现为:
         51  drop table "SCOTT"."TEST_HOB" cascade constraints;
         34  drop table scott.test_nested_tab;
   备注删除嵌套表在oracle日志表现在操作TEST_HOB表中。

转载于复杂嵌套表

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值