中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PLSQL集合

發布時間:2020-07-31 02:05:22 來源:網絡 閱讀:708 作者:斷情漠 欄目:數據庫

PLSQL集合

  • 索引表(或者叫做關聯數組,associative array

  • 嵌套表(nested table

  • 變長數組(varray

  • 二維數組(多層集合)

索引表

---創建索引表類型的語法如下所示:               

TYPE  type_name IS TABLE OF  element_type

   INDEX BY index_type;  

table_name  TYPE_NAME;

--其中,element_type 指明集合中存放的數據的類型

--index_type指定下標的類型。只能是整型或者字符串

--使用下標來引用索引表中的單個元素,如下所示:

table_name(index);

---示例1:分別聲明一個游標和一個索引表類型,游標

--student表中檢索出前10個學生的姓名。遍歷游標,

--將每個學生的姓名保存到一個索引表類型的集合中,

--然后從集合中取出每個學生的姓名打印到屏幕上

declare
  --聲明游標,保存10個學生姓名
 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;
   --將學生姓名保存到集合中
   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;

嵌套表

創建嵌套表的語法如下所示:

TYPE type_name IS TABLEOF element_type;

table_name  TYPE_NAME;

--該聲明非常類似于索引表的聲明,只是沒有INDEXBY子句。

--嵌套表的下標類型固定為Integer整型

declare
  --聲明游標,保存10個學生姓名
 cursor c_student is
   select last_name
     from student
     where rownum <= 10;   
  --聲明嵌套表集合類型
 type last_name_type is table of student.last_name%type;
  --聲明集合變量。必須使用構造器函數進行初始化
  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;
   --必須調用extend方法添加存儲空間
    last_name_tab.extend;         --和數組一樣,每賦值一個元素需調用extend
   --將學生姓名保存到集合中
   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;

變長數組

創建變長數組的語法如下所示:

TYPE  type_name IS VARRAY(size_limit) OFelement_type ;

varray_name  TYPE_NAME;

--size_limit:最大元素個數

 

--它和嵌套表類型的區別是:他有最大元素個數限制

--修改上例,使用保長數組類型

declare
  --聲明游標,保存10個學生姓名
 cursor c_student is
   select last_name
     from student
     where rownum <= 10;
  --聲明變長數組集合類型
  type last_name_type is varray(10) of student.last_name%type; 
  --聲明集合變量。必須使用構造器函數進行初始化
  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;
   --必須調用extend方法添加存儲空間
    last_name_tab.extend;   --每賦值一個元素需調用extend
   --將學生姓名保存到集合中
   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;

--可見,變長數組在編碼使用的限制和嵌套表完全相同。

二維數組

Oracle 9i開始,PL/SQL允許創建元素類型為集合類型的集合。這種集合被稱為多層集合。

二維數組:有一個一維數組,其中的每個元素又是一個一維數組,那么這個一維數組叫做二維數組。

為引用這個多層集合中單獨的元素,需要使用如下語法:

varray_name(subscript  of the outer  varray)

          (subscript  of the  inner varray)

declare
  --聲明變長數組類型
  typevarray_type1 is varray(4) of number;
  --聲明多層集合(二維數組)
  typevarray_type2 is varray(3) of varray_type1;
  varray1varray_type1 := varray_type1(2,4,6,8);
  varray2varray_type2 := varray_type2(varray1);
begin
 varray2.extend;  --調用extend
  varray2(2):= varray_type1(1,3,5,7);
 varray2.extend;  --調用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;
/


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

盈江县| 永丰县| 日照市| 米泉市| 佳木斯市| 绍兴市| 石城县| 漳州市| 南丰县| 乳山市| 囊谦县| 于都县| 田阳县| 屯留县| 乌鲁木齐县| 平舆县| 镶黄旗| 繁昌县| 上思县| 思茅市| 台湾省| 怀安县| 喀什市| 中卫市| 柳江县| 长葛市| 阿城市| 台北市| 监利县| 沽源县| 米易县| 兴化市| 临洮县| 莲花县| 延川县| 应城市| 边坝县| 淄博市| 华蓥市| 保山市| 本溪市|