PL/SQL語言的集合類似於數組,是管理多行資料必須的結構體。集合就是列表,可能有序,也可能無序。PL/SQL的集合類型有:聯合數組、巢狀表格和可變數組三種。
1、聯合數組
聯合數組類似於C語言中的數組。
(1)文法格式如下:
type typeName is table of arrayType index by binary_integer;
其中,typeName表示新類型的類型名,arrowType表示要定義的聯合數組的類型。
假設有一個表t_module(name varchar(20)),那麼我們可以針對其name欄位建立如下聯合數組:
type moduleName is table of t_module.name%type index by binary_integer;
(2)元素賦值
範例程式碼如下:
declare type NameArray is table of varchar(20) index by binary_integer; /*定義聯合數組NameArrow*/ na NameArray; /*聲明聯合數組NameArrow的一個變數*/ begin na(1) := 'Hello'; /*給聯合數組賦值*/ na(2) := 'World'; /*給聯合數組賦值*/ na(5) := 'Oracle'; /*給聯合數組賦值*/ dbms_output.put_line(na(1) || na(2)); end;
注意:
a.聯合數組中的元素不是按特定順序排列的,元素的下標也是可以無序的,所以nameArrow(-100) := 'Hello'也是可以的。
b.index的資料類型是binary_integer類型,所以index的範圍為-214483647~+214483647。
c.當調用不存在的元素時將會出錯。
2、巢狀表格
巢狀表格的聲明和聯合數組的聲明十分類似。文法格式如下:
type typeName is table of arrayType [not null]
巢狀表格的聲明與聯合數組的唯一不同是沒有index by binary_integer子句。
(1)巢狀表格的初始化
巢狀表格的初始化和聯合數組的初始化是不同的。在聲明了聯合數組之後,再聲明一個聯合數組對應的變數,如果此時沒有給該變數賦值,那麼該變數對應的聯合數組就是一個空的,在以後的語句中還可以給該聯合數組添加元素;而如果在聲明了巢狀表格變數時沒有初始化,則該巢狀表格將自動初始化為null,並且是唯讀。如果在後續代碼中繼續向該巢狀表格中添加元素,就會報錯,但是可以修改已經存在的元素的值。
以下是一個巢狀表格的初始化樣本:
declare type NameArray is table of varchar(20); na NameArray := NameArray('ZhangSan', 'LiSi', 'WangWu'); /*在聲明的時候即初始化該巢狀表格*/ begin for nameIndex in 1..3 loop dbms_output.put_line(na(nameIndex)); end loop; end;