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

          Varrays 由其元素的最大數目限定的單維有限數組,可以改變varrays數組的上界.可以使用varrays按一定順序存儲固定數目的元素.元素插入到Varrays數組時,是從位置1開始的,可以一直增加到數組長度的上限,varrays元素的最大數目為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時,以專守以下規則:?
          ??? 可以使用%TYPE和%ROWTYPE
          ??? data_type不能是BOOLEAN、NCHAR、NVARCHAR2、REF CURSOR、NCLOB類型

          下面是一個可變數組的例程
          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;

          嵌套表
          ??????? 嵌套表是數據元素可以無限大而且無序的一個一維數據,所有元素的數據類型都相同。除了定義它時不能使用index by?binary_integer子句外,與index-by表非常相似,嵌套表數組中沒有最大數目限制。(實際上也是一個一維數組)。
          1、定義TABLE類型
          ???? 其語法如下
          ??????type table_name is table of data_type [not null]
          ??????如:
          ????? type num_table is table of number
          ?????該語句聲明了一個元素數目無限大的數字型嵌套表
          ????? 定義data_type時,要專守以下規劃:
          ??????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();?--不帶參數構造一個空表
          ???if?v_numtable?is?null?then
          ??????dbms_output.put_line(
          '構造一個空v_numtable?is?null');
          ???
          else?
          ??????dbms_output.put_line(
          '構造一個空表時,v_numtable?不等于null');
          ???
          end?if?;
          ??
          --?if?v_numtable(1)?is?null?then??--這樣的話,編譯雖通過,執行時出錯
          ??--????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預定義了在varray 和嵌套表實例上進行調用的方法。這些方法能在集合上執行一定的功能。

          EXISTS

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

          Collection.EXISTS(index)

          COUNT

          該函數集合元素的數目

          Collection.COUNT

          DELETE

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

          Table_name.DELETE 刪除所有元素

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

          Table_name.delete(start_index,end_index)刪除區間內元素

          FIRST

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

          Collection.FIRST

          LAST

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

          Collection. LAST

          NEXT

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

          Collection. NEXT

          PRIOR

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

          Collection. PRIOR

          LIMIT

          返回varray中創建元素的最大個數

          Collection. LIMIT

          EXTENDS

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

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

          TRIM

          從集合末尾處刪除元素

          Collection.TRIM 刪除最后一個元素

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

          ?

          數據加中的集合
          與index-by表不同,varray和嵌套表可以作為對象-關系表中的珍存儲在數據庫中。它們也可以作為對象關系表中的列使用。為了表示出作為數據庫列的數據類型,集合類型必須是在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
          有個問題請教你,給集合附值(添加元素),可以是相同的值嗎?按照集合的定義,應該是不同的,但是我在嘗試的時候發現可以是相同的,怎么辦?
          請給我一些幫助,我的郵箱: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;
            回復  更多評論
            
          本站不再更新,歡迎光臨 java開發技術網
          主站蜘蛛池模板: 银川市| 丰宁| 城市| 奈曼旗| 长海县| 化州市| 葫芦岛市| 赫章县| 泽普县| 唐海县| 莒南县| 祁阳县| 红原县| 丹巴县| 武威市| 周至县| 武宣县| 易门县| 潍坊市| 舟山市| 平定县| 绍兴县| 吴桥县| 遵义县| 光山县| 赤峰市| 建水县| 龙井市| 达尔| 民权县| 噶尔县| 启东市| 韶山市| 延庆县| 荣成市| 子长县| 博乐市| 宝应县| 古丈县| 广宁县| 河池市|