oracle 陣列定義

2021-05-23 15:54:56 字數 4389 閱讀 1681

集合:是具有相同定義的元素的聚合。oracle有兩種型別的集合:  

可變長陣列(varray):可以有任意數量的元素,但必須預先定義限制值。  

巢狀表:視為表中之表,可以有任意數量的元素,不需要預先定義限制值。  

在pl/sql中是沒有陣列(array)概念的。但是如果程式設計師想用array的話,就得變通一下,用type   和table   of   record來代替多維陣列,一樣挺好用的。  

emp_type   就好象乙個table   中的一條record   一樣,裡面有id,   name,gender等。emp_type_array   象個table,   裡面含有一條條這樣的record   (emp_type),就象多維陣列一樣。  

--單維陣列

declare  

type   emp_ssn_array   is   table   of   number  

index   by   binary_integer;  

best_employees   emp_ssn_array;  

worst_employees   emp_ssn_array;  

begin  

best_employees(1)   :=   '123456';  

best_employees(2)   :=   '888888';  

worst_employees(1)   :=   '222222';  

worst_employees(2)   :=   '666666';  

for   i   in   1..best_employees.count   loop  

dbms_output.put_line('i='||   i   || &nb

sp; ',   best_employees=   '   ||best_employees(i)  

||   ',   worst_employees=   '   ||worst_employees(i));  

end   loop;  

end;  

--多維陣列

declare  

type   emp_type   is   record  

(   emp_id   employee_table.emp_id%type,  

emp_name   employee_table.emp_name%type,  

emp_gender   employee_table.emp_gender%type   );  

type   emp_type_array   is   table   of   emp_type   index   by   binary_integer;  

emp_rec_array   emp_type_array;  

emp_rec   emp_type;  

begin  

emp_rec.emp_id   :=   300000000;  

emp_rec.emp_name   :=   'barbara';  

emp_rec.emp_gender   :=   'female';  

emp_rec_array(1)   :=   emp_rec;  

emp_rec.emp_id   :=   300000008;  

emp_rec.emp_name   :=   'rick';  

emp_rec.emp_gender   :=   'male';  

emp_rec_array(2)   :=   emp_rec;  

for   i   in   1..emp_rec_array.count   loop  

dbms_output.put_line('i='||i  

||',   emp_id   ='||emp_rec_array(i).emp_id  

||',   emp_name   ='||emp_rec_array(i).emp_name  

||',   emp_gender   =   '||emp_rec_array(i).emp_gender);  

end   loop;    

end;  

--------------   result   --------------  

i=1,   emp_id   =300000000,   emp_name   =barbara,   emp_gender   =   female  

i=2,   emp_id   =300000008,   emp_name   =rick,   emp_gender   =   male

用下面語句宣告陣列型別  

type   intarray   is   varry(30)   of   integer;  

用下面語句宣告乙個陣列變數  

declare    

aaa   intarray;

乙個例子

1。如果使用固定長度的陣列,而且不需要在外部定義可以如下定義:

create or replace function test() return varchar2 is

result varchar2(100);

type ar is varray(15) of varchar2(12);

rt ar:=ar('dd','ff','ss');

i integer:=1;

begin

for i in 1..ar.count loop

rt(i):=i;

dbms_output.put_line('count='||rt(i));

end loop;

return(result);

end cc;

ar是定義的陣列型別

rt是ar的型別的變數,此處注意就是ar必須初始化。如果不初始化後邊是不能使用的

2。如果我們要使用的陣列長度不能預計,我們可以按如下方法作:

create or replace function test() return varchar2 is

result varchar2(100);

type numtab is table of varchar2(50) index by binary_integer; 

arr numtab;

i integer:=1;

begin

for i in 1..15 loop

arr(i):=i;

dbms_output.put_line('arr['||i||']='||arr(i));

end loop;

dbms_output.put_line('count='||arr.count);

return(result);

end cc;

ORACLE 之陣列定義

固定陣列 declare type type array is varray 10 of varchar2 20 一維陣列,字串型別 var array type array type array ggs jjh wsb csl dd bb begin for i in 1.var array.co...

ORACLE 之陣列定義

固定陣列 declare type type array is varray 10 of varchar2 20 一維陣列,字串型別 var array type array type array ggs jjh wsb csl dd bb begin for i in 1.var array.co...

ORACLE 變數定義

1 declare 2 v productid productinfo.productid type 3 v productname varchar2 20 4 v productprice number 8,2 5 v quantity number 10 6 v desperation cons...