程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 初識oracle嵌套表

初識oracle嵌套表

編輯:Oracle數據庫基礎

Oracle中的集合數據類型,允許存儲元素集合,有三種變長數組、嵌套表、關聯數組(索引表)。前段寫查號程序看了下變長數組、索引表。嵌套表是任意數量元素的有序集合,所有元素是同一數據類型。嵌套表有單個列,該列的類型可以是內置的數據庫類型,也可以是以前創建過的對象類型。一、創建對象類型
SQL> create type name_typ as object(
  2  first_name   varchar2(30),
  3  second_name  varchar2(30),
  4  short_name   varchar2(10)
  5  );
  6  / Type created

二、創建嵌套表類型
SQL> create type nested_table_name  as table of name_typ
  2  / Type created create table nested_table_name  as table of name_typ ORA-00928: missing SELECT keyWord
應該是tyep而非table,就像用關鍵字count decode定義變量,會報缺少(的錯誤一樣。三、用嵌套表類型去定義表的列或者定義變量

SQL> create table test_jhj(
  2  id number(6) primary key,
  3  names nested_table_name
  4  )
  5  nested table
  6     names
  7  store as
  8     nested_names
  9  / Table created 注:
create table test_jhj(
id number(6),
namees nested_table_name  
ORA-22913: must specify table name for nested table column or attribute
定義的時候,記得用nested table 標識,嵌套表列的的名稱。意指實際嵌套表列名為nested_names。四、獲得嵌套表相關的信息
SQL> desc nested_table_name;
 nested_table_name TABLE OF NAME_TYP  ----------------------------------------- -------- ----------------------------
 FIRST_NAME                                         VARCHAR2(30)
 SECOND_NAME                                        VARCHAR2(30)
 SHORT_NAME                                         VARCHAR2(10)
SQL> desc test_jhj;  ----------------------------------------- -------- ------------------------
 ID                                        NOT NULL NUMBER(6)
 NAMES                                              NESTED_TABLE_NAME SQL> set describe depth 2
SQL> describe test_jhj  ----------------------------------------- -------- ------------------------
 ID                                        NOT NULL NUMBER(6)
 NAMES                                              NESTED_TABLE_NAME
   FIRST_NAME                                       VARCHAR2(30)
   SECOND_NAME                                      VARCHAR2(30)
   SHORT_NAME                                       VARCHAR2(10) SQL> select *
  2  from user_nested_tables/all_nested_tables
  3 
五、嵌套表的操作:增、刪、改、查;
①增
表test_jhj可以看成1個家庭裡 有多個成員 而每個成員有多個名字 SQL> insert into test_jhj values(1,nested_table_name(name_typ('張','金花婆婆','婆婆'),
  2  name_typ('楊','00','楊帥帥')
  3  )
  4  );
--------1號家庭有2名成員:小名分別為金花婆婆 楊帥帥 SQL> insert into test_jhj values(2,
  2  nested_table_name(
  3    name_typ('曹','妙妙草','苗苗'),
  4    name_typ('徐','0','海豹'),
  5    name_typ('狄','狄狄兔','海洋一餅'),
  6    name_typ('於','00','小魚')
  7    )
  8  );
--------2號家庭有4名成員,昵稱分別為苗苗 海豹 海洋一餅 小魚②查
SQL> select *
  2  from test_jhj
     where id=1  
        I NAMES(FIRST_NAME, SECOND_NAME, SHORT_NAME)          1
NESTED_TABLE_NAME(NAME_TYP('張', '金花婆婆', '婆婆'), NAME_TYP('楊', '00', '楊
帥帥'))
③改
(1)隨著時間的推移,1號家庭增加了一個nick為可可豆的成員 SQL> insert into table(select names from test_jhj where id=1
  2  )values(name_typ('蘇','小可','可可豆')); 再看一下1號家庭的成員 SQL> select *
  2  from test_jhj
  3  where id=1;         ID NAMES(FIRST_NAME, SECOND_NAME, SHORT_NAME)          1
NESTED_TABLE_NAME(NAME_TYP('張', '金花婆婆', '婆婆'), NAME_TYP('楊', '00', '楊
帥帥'), NAME_TYP('蘇', '小可', '可可豆'))
(2)1號家庭nick為可可豆的同學 不叫蘇小可 而叫莫小米
SQL>  update table(select names from test_jhj where id=1) name_nick
  2   set 
  3    value(name_nick)=name_typ('莫','小米','可可豆')
  4   where
  5    value(name_nick)=name_typ('蘇','小可','可可豆')
  6  / SQL> select *
  2  from test_jhj
  3  where id=1
  4  /         ID NAMES(FIRST_NAME, SECOND_NAME, SHORT_NAME)          1
NESTED_TABLE_NAME(NAME_TYP('張', '金花婆婆', '婆婆'), NAME_TYP('楊', '00', '楊
帥帥'), NAME_TYP('莫', '小米', '可可豆')) (3)名叫莫小米,nick為可可豆的小童鞋,離家出走了,從花名冊中delete
SQL> delete
  2  from table
  3  (select names from test_jhj where id=1) name_nick
  4  where value(name_nick) = name_typ(
  5  '莫','小米','可可豆'
  6  ); 1號家庭還有幾個人?
SQL> select *
  2  from test_jhj
  3  where id=1
  4  /         ID NAMES(FIRST_NAME, SECOND_NAME, SHORT_NAME)          1
NESTED_TABLE_NAME(NAME_TYP('張', '金花婆婆', '婆婆'), NAME_TYP('楊', '00', '楊
帥帥'))

----edit on 2010 06 30

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved