看到同事寫的儲存過程裡面有這樣一句:
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);3. 得到陣列的容量i := 2;
l := v(i+1);
對varray變數使用count()方法。注意,你不需要指定圓括號,因為這個方法沒有輸入引數:
n_entries := v.count();這告訴你這個陣列中正在使用的條目數。當varray型別被宣告的時候,其最大的容量也就被定義了。你可以用limit()方法得到該容量:
array_capacity := v.limit();4. 遍歷varray中的值
你可以使用多種技術。最簡單的是使用for迴圈:
for i in 1..v.count() loop你也可以使用first()和last()方法。first()返回陣列的第乙個條目的下標(總是1),last()返回陣列的最後乙個條目的下標(與count方法相同)。dbms_output.put_line('v('||i||')=' || v(i));
end loop;
for i in v.first()..v.last() loop你也可以使用prior(n)和next(n)方法,這兩個方法分別返回給定條目的前乙個和後乙個條目的下標。例如,下面的**用來向後遍歷整個陣列:dbms_output.put_line('v('||i||')=' || v(i));
end loop;
i := v.count();prior(n)和n-1是一樣的,next(n)和n+1是一樣的,但是prior(1)和next (v.count())則返回null。while i is not null loop
dbms_output.put_line('v('||i||')=' || v(i));
i := v.prior(i);
end loop;
5. 對varray的擴充套件
使用extend(k)方法。這個方法可以在varray的最後追加k個新的條目。如果k沒有被指定,只增加乙個條目。新增的條目沒有值(預設為null),但是你可以對它們進行初始化。count()和last()方法現在可以反映varray新的容量。以下**向陣列中新增兩個條目並對其進行初始化:
i := v.last();注意,你對varray的擴充套件不可以超過其最大容量(通過limit()方法得到),且在對varray擴充套件前必須要對其進行初始化。以下**是無效的:v.extend(2);
v(i+1) := 5;
v(i+2) := 6;
vt my_array_type;下面的**是有效的:vt.extend(5);
vt my_array_type;6. 對varray的縮減vt := my_array_type();
vt.extend(5);
使用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.如果 沒有對應字...