<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    本站不再更新,歡迎光臨 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 有貓相伴的日子 閱讀(1193) 評論(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開發技術網
    主站蜘蛛池模板: 亚洲欧洲av综合色无码| 亚洲国产精品一区二区三区在线观看| 久久亚洲中文字幕无码| 97无码免费人妻超级碰碰夜夜| 亚洲美女视频网站| 最近免费中文在线视频| 亚洲视频免费一区| 成人免费福利视频| 激情综合亚洲色婷婷五月| 国产精品成人免费一区二区| 国产精品亚洲专区在线观看| 最新猫咪www免费人成| 亚洲欧美国产国产综合一区| 无码专区一va亚洲v专区在线| jizz18免费视频| 亚洲av无码片在线播放| 1000部拍拍拍18勿入免费凤凰福利 | 香蕉国产在线观看免费| 亚洲日本在线观看视频| 男人天堂免费视频| 亚洲美女视频免费| 在线观看人成网站深夜免费| 一本久久免费视频| 无码久久精品国产亚洲Av影片| 青青视频观看免费99| 国产成人精品日本亚洲语音| 在线日韩日本国产亚洲| 91制片厂制作传媒免费版樱花| 亚洲www在线观看| 亚洲国产激情一区二区三区| 国产精品免费无遮挡无码永久视频| 亚洲精品视频在线观看视频| 青青草国产免费久久久91| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 亚洲精品第一国产综合境外资源 | 亚洲男女内射在线播放| 一区二区三区四区免费视频| 亚洲愉拍一区二区三区| 亚洲人成无码网站| 91视频国产免费| 两性色午夜视频免费网|