集合:是具有相同定義的元素的聚合。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...