asoka.hang's oracle/java blog

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            4 隨筆 :: 0 文章 :: 0 評論 :: 0 Trackbacks
          case:在scott.emp中有一個字段為deptno用來存儲部門編號,在關系型數據庫中一個字段只能夠存儲一列值(像ENAME列只能夠存儲員工姓名的值),要想查詢emp與dept兩表間的關聯值還得運用主從表間的關系,查詢效率不高,在emp表中deptno字段并不是很復雜(因為dept表中僅三個字段)的情況下,oracle允許在emp表中的deptno字段里存儲一個表,這雖然違反關系型數據庫的規則,但是提高了性能。

          我們將舉一個入庫明細的例子來說明可變數組在上面類似情況的應用。

          創建一個入庫的明細類型mingxitype:
          SQL > ? create ? or ? replace ?type?mingxitype? as ?object
          ??
          2
          ??(
          ??
          3 ?????goodsid? varchar ( 15
          ),
          ??
          4 ?????incount? int
          ,
          ??
          5 ?????providerid? varchar ( 10
          )
          ??
          6
          ??);
          ??
          7 ?? /

          創建一個基于mingxitype類型的可變數組:
          SQL > ? create ? or ? replace ?type?arrmingxitype? as ?varray( 100 )? of ?mingxitype;
          ??
          2 ?? /

          創建一個產品入庫主表:
          SQL > ? create ? table ?instock
          ??
          2
          ??(
          ??
          3 ?????orderid? int ? primary ? key
          ,
          ??
          4
          ?????indate?date,
          ??
          5
          ?????mingxi?arrmingxitype
          ??
          6 ??);

          向主表中插入數據:
          SQL > ? insert ? into ?instock? values ( 1001 ,to_date( ' 2006-1-1 ' , ' YYYY-MM-DD ' ),arrmingxitype
          ??
          2 ??(mingxitype( ' 101 ' , 10 , ' S01 ' ),mingxitype( ' 102 ' , 30 , ' S05 ' )));

          通過查詢可以查出主表instock中的字段mingxi中其實包括了一張表的內容,因為顯示出來的arrmingxitype可變數組內容比較零亂,降低了可讀性,運用PL/SQL可以讀出,但是這里我們用table()函數即可完成這個輸出修改,SQL語句如下:
          SQL > ? select ? * ? from ? table ( select ?s.mingxi? from ?instock?s? where ?orderid = 1001 );

          GOODSID????????????INCOUNT?PROVIDERID
          -- -------------?----------?----------

          101 ????????????????????? 10 ?S01
          102 ????????????????????? 30 ?S05

          這樣,通過在表中插入一個可變數組就將文中case里的問題給解決了。

          可變數組也有一定的缺陷,比如更新起來比較麻煩,因為不能更新varray中的單個元素,也就意味著,如果要去更新varray中的某個字段,需得將整個varray中的數據全部重新輸入一次,所以,可變數組在應用過程中需得慎重選擇,可以將其應用于一些平常不需要去修改數據的環境中,比如醫院里醫生開的處方歸檔資料庫等case中。
          posted on 2006-04-13 16:18 asoka的oracle/java博客 閱讀(648) 評論(0)  編輯  收藏 所屬分類: Oracle
          主站蜘蛛池模板: 朝阳区| 深州市| 东宁县| 呈贡县| 仁寿县| 临沭县| 卓资县| 沧源| 驻马店市| 枝江市| 屏边| 鹤庆县| 响水县| 六枝特区| 唐山市| 怀化市| 错那县| 万州区| 淮阳县| 吉水县| 东明县| 凤山县| 尚义县| 花莲市| 容城县| 尖扎县| 德清县| 安图县| 尚义县| 阳山县| 乌鲁木齐县| 博爱县| 盐山县| 增城市| 康定县| 秀山| 乡宁县| 临澧县| 乌苏市| 林口县| 兴化市|