您好,登錄后才能下訂單哦!
索引表(或者叫做關(guān)聯(lián)數(shù)組,associative array )
嵌套表(nested table)
變長數(shù)組(varray)
二維數(shù)組(多層集合)
---創(chuàng)建索引表類型的語法如下所示:
TYPE type_name IS TABLE OF element_type
INDEX BY index_type;
table_name TYPE_NAME;
--其中,element_type 指明集合中存放的數(shù)據(jù)的類型
--index_type指定下標的類型。只能是整型或者字符串
--使用下標來引用索引表中的單個元素,如下所示:
table_name(index);
---示例1:分別聲明一個游標和一個索引表類型,游標
--從student表中檢索出前10個學(xué)生的姓名。遍歷游標,
--將每個學(xué)生的姓名保存到一個索引表類型的集合中,
--然后從集合中取出每個學(xué)生的姓名打印到屏幕上
declare --聲明游標,保存10個學(xué)生姓名 cursor c_student is select last_name from student where rownum <= 10; --聲明索引表集合類型 type last_name_type is table of student.last_name%type index by pls_integer; --聲明集合變量 last_name_tab last_name_type; --聲明下標變量 v_index pls_integer := 0; begin --遍歷游標 forr_student in c_student loop v_index := v_index + 1; --將學(xué)生姓名保存到集合中 last_name_tab(v_index) := r_student.last_name; endloop; --遍歷集合 fori in 1..10 loop dbms_output.put_line( last_name_tab(i)); endloop; --注意:引用不存在的集合元素會拋出NO_DATA_FOUND異常。 --例如 --dbms_output.put_line(last_name_tab(11)); end;
創(chuàng)建嵌套表的語法如下所示:
TYPE type_name IS TABLEOF element_type;
table_name TYPE_NAME;
--該聲明非常類似于索引表的聲明,只是沒有INDEXBY子句。
--嵌套表的下標類型固定為Integer整型
declare --聲明游標,保存10個學(xué)生姓名 cursor c_student is select last_name from student where rownum <= 10; --聲明嵌套表集合類型 type last_name_type is table of student.last_name%type; --聲明集合變量。必須使用構(gòu)造器函數(shù)進行初始化 last_name_tab last_name_type := last_name_type(); --聲明下標變量 v_indexpls_integer := 0; begin --遍歷游標 forr_student in c_student loop v_index := v_index + 1; --必須調(diào)用extend方法添加存儲空間 last_name_tab.extend; --和數(shù)組一樣,每賦值一個元素需調(diào)用extend --將學(xué)生姓名保存到集合中 last_name_tab(v_index) := r_student.last_name; endloop; --遍歷集合 fori in 1..10 loop dbms_output.put_line( last_name_tab(i)); endloop; end;
創(chuàng)建變長數(shù)組的語法如下所示:
TYPE type_name IS VARRAY(size_limit) OFelement_type ;
varray_name TYPE_NAME;
--size_limit:最大元素個數(shù)
--它和嵌套表類型的區(qū)別是:他有最大元素個數(shù)限制
--修改上例,使用保長數(shù)組類型
declare --聲明游標,保存10個學(xué)生姓名 cursor c_student is select last_name from student where rownum <= 10; --聲明變長數(shù)組集合類型 type last_name_type is varray(10) of student.last_name%type; --聲明集合變量。必須使用構(gòu)造器函數(shù)進行初始化 last_name_tab last_name_type := last_name_type(); --聲明下標變量 v_index pls_integer := 0; begin --遍歷游標 forr_student in c_student loop v_index := v_index + 1; --必須調(diào)用extend方法添加存儲空間 last_name_tab.extend; --每賦值一個元素需調(diào)用extend --將學(xué)生姓名保存到集合中 last_name_tab(v_index) := r_student.last_name; endloop; --遍歷集合 fori in 1..10 loop dbms_output.put_line( last_name_tab(i)); endloop; end;
--可見,變長數(shù)組在編碼使用的限制和嵌套表完全相同。
Oracle 9i開始,PL/SQL允許創(chuàng)建元素類型為集合類型的集合。這種集合被稱為多層集合。
二維數(shù)組:有一個一維數(shù)組,其中的每個元素又是一個一維數(shù)組,那么這個一維數(shù)組叫做二維數(shù)組。
為引用這個多層集合中單獨的元素,需要使用如下語法:
varray_name(subscript of the outer varray)
(subscript of the inner varray)
declare --聲明變長數(shù)組類型 typevarray_type1 is varray(4) of number; --聲明多層集合(二維數(shù)組) typevarray_type2 is varray(3) of varray_type1; varray1varray_type1 := varray_type1(2,4,6,8); varray2varray_type2 := varray_type2(varray1); begin varray2.extend; --調(diào)用extend varray2(2):= varray_type1(1,3,5,7); varray2.extend; --調(diào)用extend varray2(3):= varray_type1(8,8,8,8); --遍歷集合 for i in1..3 loop for j in1..4 loop dbms_output.put_line('varray2('||i||')('||j ||')='||varray2(i)(j)); end loop; end loop; dbms_output.put_line('-------------------------------'); --遍歷集合,實際的寫法 for i invarray2.first..varray2.last loop for j invarray2(i).first..varray2(i).last loop dbms_output.put_line('varray2('||i||')('||j ||')='||varray2(i)(j)); end loop; end loop; end; /
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。