熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle中構造包含數組的表

2013-11-13 16:15:42  來源: Oracle 

  面向對象數據庫中存儲的是對象對象有自己的行為和屬性

  行為體現為類型的函數或者過程屬性體現為字段

  對象表確實有優勢嗎?

  基於抽象類型創建關系表和其他表的創建一樣

  基於抽象類型創建對象表create table 對象表名 of 抽象數據類型

  抽象類型可以復用也就是說一個抽象類型中可以包含另一個抽象類型做為一個字段

  構造函數是默認創造的參數包括類型的字段

  如果要插入數據到對象表有兩種方式

  一種就是insert into tablename values(字段字段);

  另一種就是我們如果想直接用構造函數構造一個大字段直接插入

  這時候不需要values但必須用slect:

  insert into tablename select 構造函數(字段字段) from xxx;

  創建帶方法的類型

  首先說方法的定義如果有返回值用member function

  沒有返回值member procedure

  ****以後再說

  可變數組

  聲明一下Oralce的oop中使用下列的對象類型

  ·抽象數據類型

  ·可變數組

  ·嵌套表

  ·對象表

  ·對象視圖

  可變數組會根據存儲數據的大小來真正存儲數據而不是占用固定的空間這類似

  Java中的ArraryList類

  關系型理論中不允許一個表中的一個記錄中存儲其他表記錄

  而Oracle中是支持的這不是違反了數據的原子性原則嗎?

  但是這樣有好處

  在用戶查詢的時候比兩個表進行關聯查詢效率高

  所以說可變數組也可以做為一條記錄的一個字段被存儲在一個表中

  當然這是違反關系數據理論的

  創建可變數組的例子

  create or replace type mingxitype as object

  (

  goodsid varchar()

  incount int

  providerid varchar()

  );

  /

  create or replace type arrmingxitype as varray() of mingxitype;

  /

  create table instock

  (

  orderid int primary key

  indate date

  mingxi arrmingxitype

  )

  /

  insert into instock

  values(to_date(yyyymmdd)

  arrmingxitype(mingxitype(so)

  mingxitype(j)

  mingxitype(i)

  )

  )

  /

  //table函數可以把可變數組轉換為關系表的形式顯示出來

  select * from table(select smingxi from instock s where orderid=)

  GOODSID            INCOUNT PROVIDERID

  

                       so

                       j

                       i

  可變數組的元素不能單獨改必須全部改

  所以可變數組適合的場合是

  用戶不會修改的數據歷史性的數據就適合用可變數組

  刪除數據是通用的

  //可變數組的基類型是用戶定義的所以這個基類型也可以是一般數據類型比如int;

  create or replace type arrayint as varray() of int;


From:http://tw.wingwit.com/Article/program/Oracle/201311/18046.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.