兩個表通常使用外來鍵建立資料之間的關聯,相對於這樣的方式訪問資料庫,儲存在集合中的資料可以更快的被訪問。常用的集合型別:
index-by表
巢狀表可變陣列
index-by表類似c語言中的陣列,但是元素順序並沒有按照特定的順序排列。元素的個數只受到binary_integer的下標大小限制。
type
tabletype
istable
ofindex
bybinaru_interger;
--typetable:
定義的新型別型別名
--type
:定義index-by
表的型別
type
country_name
istable
ofcountries.countries_name%
type
--宣告使用型別
index
bybinary_integer;--
宣告變數
v_name country_name;
--賦值操作
begin
v_name(
1):=
'china'
;v_name(
2):=
'anhui'
;v_name(
3):=
'hefei'
;v_name(-
2):=
'suzhou'
;v_name(
6):=
'sixian'
;end;
呼叫沒有賦值的元素
declare
type
studytab
istable
ofvarchar(20
) index
bybinary_integer
;v_studytab studytab;
begin
--使用迴圈賦值
forv_count in1
..5
loop
v_studytab(v_count):=v_count*
100;
endloop;--
使用迴圈取值
forv_count in1
..6
loop
dbms_output.put_line(v_studytab(v_count));
endloop
;end;--
上面賦值的時候只賦了
5個值,但是取值的時候取了
6個值,報錯
--:未找到資料
巢狀表和index-by表相比少了index
bybinary_integer子句。這也是區分兩種表的區別。 --
巢狀表宣告語法
type
table_name
istable
oftable_type[
notnull
];--
巢狀表的初始化
declare
type
studytab
istable
ofvarchar(20
);v_studytab studytab:=studytab(
'tom'
,'jack'
,'rose'
);begin
forv_count in1
..3
loop
dbms_output.put_line(v_studytab(v_count));
endloop
;end
;² index-by表:如果宣告型別之後,再宣告乙個index-by表變數型別,如果沒有給
該錶賦值,那麼這個表就是空的,後面可以繼續新增
² 巢狀表:宣告巢狀表變數型別時,如果表中沒有任何元素,會初始化為null,並且
是唯讀的,如果再新增元素就會出現錯誤
error
初始化為
null
後新增元素:引用未初始化的收集
初始化賦值後新增元素:下標超出數量
元素的序列
巢狀表和index-by表很相似,但是巢狀表在結構上是有序的,index-by表是無序的,給巢狀表賦值,下標從1開始,而且依次遞增。
declare
type
numtab
istable
ofnumer(4);
v_num numtab:=numtab(1,
2,4,
5,7,
9);begin
forv_count in1
..6
loop
dbms_output.put_line(
'v_num('
||v_count||
')='
||v_num(v_count));
endloop
end;
上面賦值後的下標依次是:1,2,3,4,5,6
可變陣列宣告
---陣列宣告語法
---type
type_name
is(maxinum_size)
ofelement_type[
notnull
];--type_name:
可變陣列的型別名
--maxinum_size
:可變陣列元素個數的最大值
--element_type:
陣列元素的型別
---建立乙個陣列
---declare
--包含星期陣列
type
dates
isvarray(7
) of
varchar2(10
);--
包含月份陣列
type
months
isvarray(12
) of
varchar2(10
);---
陣列的初始化
---declare
type
dates
isvarray(7
) of
varchar2(10
);v_dates dates:=dates(
'monday'
,'tuesday'
,'wednesday'
);begin
dbms_output.put_line(v_dates(
1));
dbms_output.put_line(v_dates(
2));
dbms_output.put_line(v_dates(
3));
end;
index-by表,巢狀表,可變陣列是物件型別,本身具有屬性和方法。
1. count:返回集合中陣列元素的個數
2. delete:刪除集合中乙個或多個元素
delete—刪除所有元素
delete(x)—刪除第x位置的元素
delete(x,y)—刪除兩個位置之間的元素
3. extist:判斷集合中元素是否存在
extists(x)—判斷x位置的元素是否存在
4. extend把元素新增到集合末端
extend把乙個null元素新增到集合中
extend(x)—將x個null元素新增到集合的末端
extend(x,y)—將x個位於y的元素新增到集合的末端
5. first和last:first返回集合的第乙個元素位置,last返回集合的最後乙個元素位置
6. limit:返回集合中最大元素的個數,巢狀表沒有上限,返回null
7. next(x),prior(x):返回x處元素的前後的元素
8. trim:刪除幾個末端的元素
trim—從幾個末端刪除乙個元素
trim(x)—從幾個末端刪除x個元素,x小於集合的count總數
declare
type
dates
isvarray(7
) of
varchar2(10
);v_dates dates:=dates(
'monday'
,'tuesday'
,'wednesday'
);begin
dbms_output.put_line(v_dates.count);
dbms_output.put_line(v_dates.last);
end;
oracle中集合的方法
除了建構函式外,集合還有很多內建函式,這些函式稱為方法。呼叫方法的語法如下 collection.method 下表中列出oracle中集合的方法 方法 描述 使用限制 count 返回集合中元素的個數 delete 刪除集合中所有元素 delete 刪除元素下標為x的元素,如果x為null,則集合...
python中集合的使用
集合在學習和日常使用python過程中是必不可少的,下面介紹幾個常見的集合操作 集合 list 1 1,2,3,4,5,6,6,7,8,5,1,2 list 1 set list 1 list 2 set 2,6,0,66,22,8,4 print list 1,list 2 交集print lis...
C 中集合的使用
c 中的集合介面 ienumerable ienumerable icollection icollection idictionary idictionary ilist ilist 集合介面的關係 inte ce ienumerablet ienumerable inte ce icollect...