本站不再更新,歡迎光臨 java開發(fā)技術(shù)網(wǎng)
          隨筆-230  評論-230  文章-8  trackbacks-0
          Oracle 9i支持三種集合數(shù)據(jù)類型:index-by 表,Varrays(可變數(shù)組)和嵌套表

          Varrays 由其元素的最大數(shù)目限定的單維有限數(shù)組,可以改變varrays數(shù)組的上界.可以使用varrays按一定順序存儲固定數(shù)目的元素.元素插入到Varrays數(shù)組時,是從位置1開始的,可以一直增加到數(shù)組長度的上限,varrays元素的最大數(shù)目為2G

          1、定義VARRAY類型
          ????? Type? type_name is {varray|varraying array}(max size) of data_type?[not null]

          下面是一個定義例子:
          type num_varray is varray(5) if?number;
          在指定data_type時,以專守以下規(guī)則:?
          ??? 可以使用%TYPE和%ROWTYPE
          ??? data_type不能是BOOLEAN、NCHAR、NVARCHAR2、REF CURSOR、NCLOB類型

          下面是一個可變數(shù)組的例程
          procedure?varrays_demo
          is
          ?num_varray??num_varray_type;
          begin
          ?num_varray:
          =num_varray_type(1,2,3,4,5,6,7,8,9,10);
          ?dbms_output.put_line(num_varray(
          1));
          ?
          for?idx?in?1..10?loop
          ?????dbms_output.put_line(num_varray(idx));
          ?
          end?loop;
          ?
          ?
          if?num_varray?is?null?then
          ????dbms_output.put_line(
          'num_varray?is?null');
          ?
          else
          ????dbms_output.put_line(
          'num_varray?is??not?null');
          ?
          end?if;
          end?varrays_demo;
          end?test;

          嵌套表
          ??????? 嵌套表是數(shù)據(jù)元素可以無限大而且無序的一個一維數(shù)據(jù),所有元素的數(shù)據(jù)類型都相同。除了定義它時不能使用index by?binary_integer子句外,與index-by表非常相似,嵌套表數(shù)組中沒有最大數(shù)目限制。(實際上也是一個一維數(shù)組)。
          1、定義TABLE類型
          ???? 其語法如下
          ??????type table_name is table of data_type [not null]
          ??????如:
          ????? type num_table is table of number
          ?????該語句聲明了一個元素數(shù)目無限大的數(shù)字型嵌套表
          ????? 定義data_type時,要專守以下規(guī)劃:
          ??????A、可以使用%TYPE和%ROWTYPE
          ????? B、可以是另一個oracle 9i的varray或table類型
          ????? C、不能是BOOLEAN、NCHAR、NVARCHAR2、NCLOB、REF CURSOR類型,下面是一個例程:

          procedure?table_demo
          is?
          ???type?num_table?
          is?table?of?number;
          ???v_numtable?num_table;
          ???vcount?
          number;
          begin
          ???
          if?v_numtable?is?null?then
          ??????dbms_output.put_line(
          'v_numtable?is?null');
          ???
          end?if?;
          ???v_numtable?:
          =num_table();?--不帶參數(shù)構(gòu)造一個空表
          ???if?v_numtable?is?null?then
          ??????dbms_output.put_line(
          '構(gòu)造一個空v_numtable?is?null');
          ???
          else?
          ??????dbms_output.put_line(
          '構(gòu)造一個空表時,v_numtable?不等于null');
          ???
          end?if?;
          ??
          --?if?v_numtable(1)?is?null?then??--這樣的話,編譯雖通過,執(zhí)行時出錯
          ??--????dbms_output.put_line('a');
          ??--end?if;
          ???v_numtable:=num_table(1,2,50,20);
          ???vcount:
          =v_numtable.count();
          ???
          for?idx?in?1..vcount?loop
          ???????dbms_output.put_line(v_numtable(idx));
          ???
          end?loop;
          end?table_demo;
          end?test;

          集合方法
          pl/sql預(yù)定義了在varray 和嵌套表實例上進行調(diào)用的方法。這些方法能在集合上執(zhí)行一定的功能。

          EXISTS

          該函數(shù)返回集合中第一個元素的索引,如果集合為空,返回NULL

          Collection.EXISTS(index)

          COUNT

          該函數(shù)集合元素的數(shù)目

          Collection.COUNT

          DELETE

          該過程從嵌套表中刪除一個或多個或合部元素

          Table_name.DELETE 刪除所有元素

          Table_name.delete(index)刪除指定索引的記錄

          Table_name.delete(start_index,end_index)刪除區(qū)間內(nèi)元素

          FIRST

          返回集合第一個元素索引,如果集合為空,返回NULL

          Collection.FIRST

          LAST

          返回集合中最后一個元素索引,如果集合為空,返回NULL

          Collection. LAST

          NEXT

          返回集合當(dāng)前元素的下一個元素的索引,如果它不存在就返回NULL

          Collection. NEXT

          PRIOR

          返回集合當(dāng)前元素的上一個元素的索引,如果它不存在就返回NULL

          Collection. PRIOR

          LIMIT

          返回varray中創(chuàng)建元素的最大個數(shù)

          Collection. LIMIT

          EXTENDS

          該過程在集合的末尾添加新的元素

          Collection.EXTEND添加一個NULL元素;Collection.extends(n)添加NNULL元素,Collection.extend(n,index)添加由index指定位置上元素的n個副表

          TRIM

          從集合末尾處刪除元素

          Collection.TRIM 刪除最后一個元素

          Collection.TRIM(n)刪除最后N個元素

          ?

          數(shù)據(jù)加中的集合
          與index-by表不同,varray和嵌套表可以作為對象-關(guān)系表中的珍存儲在數(shù)據(jù)庫中。它們也可以作為對象關(guān)系表中的列使用。為了表示出作為數(shù)據(jù)庫列的數(shù)據(jù)類型,集合類型必須是在pl/sql和sql中可見。這需要使用create or replace type 語句定義而不能僅在pl/sql塊中進行局部定義。語法如下:
          create of? replace type table_name is table of data_type

          ?????
          posted on 2007-01-22 14:34 有貓相伴的日子 閱讀(1200) 評論(1)  編輯  收藏 所屬分類: pl/sql

          評論:
          # 有個問題請教 2007-04-26 13:37 | s
          有個問題請教你,給集合附值(添加元素),可以是相同的值嗎?按照集合的定義,應(yīng)該是不同的,但是我在嘗試的時候發(fā)現(xiàn)可以是相同的,怎么辦?
          請給我一些幫助,我的郵箱:heyan.zjsx@gmail.com,謝謝。
          create or replace procedure test
          is
          type Jh is
          varray(15) of number;

          Ac jh:=Jh(1,2,3,4,5,6,7,8,9,10,11,12,13,14,14);
          i number;
          begin
          for i in 1..15 loop
          ac(i):=111;
          end loop;

          dbms_output.put_line('共有:'||ac.count);
          dbms_output.put_line(ac.first);
          dbms_output.put_line('第二個元素:'||ac.next(ac.first));

          end test;
            回復(fù)  更多評論
            
          <2007年1月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          常用鏈接

          留言簿(32)

          隨筆分類(222)

          隨筆檔案(224)

          文章分類(4)

          文章檔案(7)

          相冊

          收藏夾(4)

          最新評論

          閱讀排行榜

          評論排行榜

          本站不再更新,歡迎光臨 java開發(fā)技術(shù)網(wǎng)
          主站蜘蛛池模板: 合川市| 孝义市| 新野县| 台北市| 阿拉善盟| 辽中县| 绵阳市| 华亭县| 江山市| 沁源县| 肃宁县| 溧阳市| 穆棱市| 漳浦县| 临清市| 邳州市| 敖汉旗| 繁昌县| 天津市| 宝鸡市| 蕉岭县| 拜泉县| 镇康县| 邹平县| 酒泉市| 枝江市| 汉沽区| 奉节县| 双鸭山市| 江口县| 新巴尔虎右旗| 宁津县| 壶关县| 南雄市| 册亨县| 乌鲁木齐市| 商南县| 紫阳县| 无极县| 城步| 克拉玛依市|