ORACLE 中 VARRAY的用法

2021-06-06 04:58:50 字數 2558 閱讀 8631

看到同事寫的儲存過程裡面有這樣一句:

type array_type is varray(10000) of varchar2(60);

感到很茫然,幸好還有網路可以求助,我理解成是:長度為10000的陣列,其每個為長度為最大長度為60的varchar2型別。不知是否準確?

1. 宣告和初始化varray變數

你不可以直接宣告乙個varray變數。必須先宣告乙個包含這個陣列最大容量的型別:

type my_array_type is varray(10) of number; 

然後,你就可以用這個型別宣告varray變數:

v my_array_type; 

在你對這個陣列進行操作以前,必須先初始化該陣列。你既可以在宣告它的時候對其初始化,也可以在宣告後對其賦值。下面展示了在宣告的同時對其進行初始化:

v my_array_type := my_array_type (); 

2. 從指定的條目處取值

把條目的數目作為下標。下標可以是返回整數值(該值小於或等於陣列條目數)的任意表示式,如:

k := v(3);  

i := 2;  

l := v(i+1); 

3. 得到陣列的容量

對varray變數使用count()方法。注意,你不需要指定圓括號,因為這個方法沒有輸入引數:

n_entries := v.count(); 

這告訴你這個陣列中正在使用的條目數。當varray型別被宣告的時候,其最大的容量也就被定義了。你可以用limit()方法得到該容量:

array_capacity := v.limit(); 

4. 遍歷varray中的值

你可以使用多種技術。最簡單的是使用for迴圈:

for i in 1..v.count() loop  

dbms_output.put_line('v('||i||')=' || v(i));  

end loop; 

你也可以使用first()和last()方法。first()返回陣列的第乙個條目的下標(總是1),last()返回陣列的最後乙個條目的下標(與count方法相同)。

for i in v.first()..v.last() loop  

dbms_output.put_line('v('||i||')=' || v(i));  

end loop; 

你也可以使用prior(n)和next(n)方法,這兩個方法分別返回給定條目的前乙個和後乙個條目的下標。例如,下面的**用來向後遍歷整個陣列:

i := v.count();  

while i is not null loop  

dbms_output.put_line('v('||i||')=' || v(i));  

i := v.prior(i);  

end loop; 

prior(n)和n-1是一樣的,next(n)和n+1是一樣的,但是prior(1)和next (v.count())則返回null。

5. 對varray的擴充套件

使用extend(k)方法。這個方法可以在varray的最後追加k個新的條目。如果k沒有被指定,只增加乙個條目。新增的條目沒有值(預設為null),但是你可以對它們進行初始化。count()和last()方法現在可以反映varray新的容量。以下**向陣列中新增兩個條目並對其進行初始化:

i := v.last();  

v.extend(2);  

v(i+1) := 5;  

v(i+2) := 6; 

注意,你對varray的擴充套件不可以超過其最大容量(通過limit()方法得到),且在對varray擴充套件前必須要對其進行初始化。以下**是無效的:

vt my_array_type;  

vt.extend(5); 

下面的**是有效的:

vt my_array_type;  

vt := my_array_type();  

vt.extend(5); 

6. 對varray的縮減

使用trim(k)方法。這個方法在varray的尾部刪除最後k個條目。當k沒有被指定時,刪除最後乙個條目。已被刪除的條目的值將丟失。count()和last()方法反映了新的容量。下面從varray中刪除最後乙個條目:

v.trim; 

你也可以用以下方式刪除陣列中的所有條目:

v.trim(v.count()); 

或者用具有效果相同的delete()方法。該方法刪除陣列中的所有條目,並把其容量設定為0(也就是說,v.count()現在的返回值為0)。

v.delete() 

racle的STRUCT和VARRAY的讀寫方法

巧巧電腦網路 2010 02 25 qqread 佚名 收藏此文 大中小 分享到qq空間 人人網開心網 豆瓣更多 本文給出了讀寫oracle的特殊資料型別struct和varray的操作方法。首先,建立型別 create type struct test as object s varchar 30...

ORACLE中的( )怎麼用

分享 2011 02 15 10 03 為女兒而奮鬥 瀏覽 19788 次 oracle 2011 02 15 10 12 提問者採納 就是連線 譬如select a.b.from a b就是乙個右連線,等同於select a.b.from a right join b select a.b.fro...

oracle 中translate的基本用法

1.translate 與replace類似是替換函式,但translate是一次替換多個單個的字元。2.基本用法,字元對應替換。例子 select translate 1234567 123 abc from dual 1替換為a,2替換為b,3替換為c 結果 abc4567 3.如果 沒有對應字...