oracle 数组用法

集合:是具有相同定义的元素的聚合。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    
      A   intarray;

一个例子

declare
stmt varchar2(200);
dept_no_array dbms_sql.Number_Table;
c number;
dummy number;
begin
dept_no_array(1) := 10; dept_no_array(2) := 20;
dept_no_array(3) := 30; dept_no_array(4) := 40;
dept_no_array(5) := 30; dept_no_array(6) := 40;
stmt := 'delete from emp where deptno = :dept_array';
c := dbms_sql.open_cursor;
dbms_sql.parse(c, stmt, dbms_sql.native);
dbms_sql.bind_array(c, ':dept_array', dept_no_array, 1, 4);
dummy := dbms_sql.execute(c);
dbms_sql.close_cursor(c);

exception when others then
    if dbms_sql.is_open(c) then
      dbms_sql.close_cursor(c);
    end if;
    raise;
end;
/


你可能感兴趣的:(oracle 数组用法)