oracle陣列使用例項

2021-06-28 03:04:49 字數 4500 閱讀 8099

《一維陣列

set serverout on size 100000

declare

type t_varray is varray(3) of varchar2(20);

v_var t_varray := t_varray('i', 'love', 'study');

begin

for i in 1 .. v_var.count loop

dbms_output.put_line(v_var(i));

end loop;

end;

/《二維陣列

《二維陣列example1

declare

type t_varray is varray(5) of number;

type t_varray_varray is varray(2) of t_varray;

v_var t_varray_varray := t_varray_varray(t_varray(11, 12, 13, 14, 15),

t_varray(21, 22, 23, 24, 25));

begin

for i in 1 .. v_var.count loop

for j in 1 .. v_var(i).count loop

dbms_output.put_line(v_var(i) (j));

end loop;

end loop;

end;

/《二維陣列example2

declare

type t_num is table of number index by binary_integer;

type t_var is table of number index by varchar2(10);

type t_num_var is table of t_num index by varchar2(10);

type t_var_num is table of t_var index by binary_integer;

v_num_var t_num_var;

v_var_num t_var_num;

begin

v_num_var('a')(5) := 1;

v_var_num(5)('a') := 1;

end;

/《可變陣列

--巢狀表

type tbl_t is table of varchar2(30);

my_tbl tbl_t := tbl_t('a', 'b', 'c'); --初始化

oracle除了陣列型別varray之外,還有巢狀表和索引表也都可以實現類似陣列的功能。

使用索引表定義陣列,不需要指定陣列的上限,陣列的大小只與記憶體限制有關。

《可變陣列example1

declare

type t_tab is table of number index by varchar2(30);

--索引是陣列的下標

v_var t_tab;

v_str varchar2(30);

begin

for i in (select owner, count(1) cn from dba_tables group by owner) loop

v_var(i.owner) := i.cn;

--索引是陣列的下標

end loop;

v_str := v_var.first;

while (v_var.exists(v_str)) loop

dbms_output.put_line(rpad(v_str, 20, '-') || ':' || v_var(v_str));

v_str := v_var.next(v_str);

end loop;

end;

/ctxsys--------------:36

dev-----------------:1915

hr------------------:7

mars3_web_usr-------:9

《可變陣列example2

declare

type t_rec is record(

vint integer,

vchr varchar2(100));

type t_tab is table of t_rec index by binary_integer;

--t_rec 等價 emp%rowtype

v_var t_tab;

y  integer := 1;

begin

for x in 1 .. 3 loop

v_var(x).vint := x;

v_var(x).vchr := to_char(v_var(x).vint, '$09.00');

end loop;

while (v_var.exists(y)) loop

dbms_output.put_line(v_var(y).vint || '/' || v_var(y).vchr);

y := y + 1;

end loop;

end;

/1/ $01.00

2/ $02.00

3/ $03.00

《可變陣列example3

declare

type t_tab is table of varchar2(20) index by binary_integer;

v_var t_tab;

begin

v_var(1) := '北京';

v_var(2) := '上海';

v_var(3) := '廣州';

dbms_output.put_line('共有記錄:' || v_var.count);

dbms_output.put_line('第一條:' || v_var.first);

dbms_output.put_line('最後一條:' || v_var.last);

dbms_output.put_line('第二條的前一條:' || v_var.prior(2));

dbms_output.put_line('第二條的後一條:' || v_var.next(2));

--count,first,last,next,prior方法返回的值是整數

--以下3種表示的內容相同:

dbms_output.put_line('第一條記錄內容:' || v_var(v_var.prior(2)));

dbms_output.put_line('第一條記錄內容:' || v_var(v_var.first));

dbms_output.put_line('第一條記錄內容:' || v_var(1));

end;

/共有記錄:3

第一條:1

最後一條:3

第二條的前一條:1

第二條的後一條:3

第一條記錄內容:北京

第一條記錄內容:北京

第一條記錄內容:北京

《可變陣列example4

declare

type t_tab is table of varchar2(20);

v_var t_tab := t_tab('北京', '上海', '廣州');

--ora-06531: reference to uninitialized collection

--如果沒有 index by binary_integer ,則需 初始化

begin

v_var(1) := '$北京';

v_var(2) := '$上海';

v_var(3) := '$廣州';

dbms_output.put_line('共有記錄:' || v_var.count);

dbms_output.put_line('第一條:' || v_var.first);

dbms_output.put_line('最後一條:' || v_var.last);

dbms_output.put_line('第二條的前一條:' || v_var.prior(2));

dbms_output.put_line('第二條的後一條:' || v_var.next(2));

--count,first,last,next,prior方法返回的值是整數

--以下3種表示的內容相同:

dbms_output.put_line('第一條記錄內容:' || v_var(v_var.prior(2)));

dbms_output.put_line('第一條記錄內容:' || v_var(v_var.first));

dbms_output.put_line('第一條記錄內容:' || v_var(1));

end;

/共有記錄:3

第一條:1

最後一條:3

第二條的前一條:1

第二條的後一條:3

第一條記錄內容:$北京

第一條記錄內容:$北京

第一條記錄內容:$北京

oracle陣列使用例項

一維陣列 set serverout on size 100000 declare type t varray is varray 3 of varchar2 20 v var t varray t varray i love study begin for i in 1 v var.count l...

使用json傳輸陣列例項

client.php 遍歷陣列元素,並將元素轉碼 function array iconv data,in charset gbk out charset utf 8 elseif count data count data,1 else return output arr array userna...

使用json傳輸陣列例項

client.php 遍歷陣列元素,並將元素轉碼 function array iconv data,in charset gbk out charset utf 8 elseif count data count data,1 else return output arr array userna...