Oracle中集合的使用

2021-07-15 18:27:47 字數 4301 閱讀 9714

兩個表通常使用外來鍵建立資料之間的關聯,相對於這樣的方式訪問資料庫,儲存在集合中的資料可以更快的被訪問。常用的集合型別:

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...