日期:2014-05-16  浏览次数:20386 次

oracle数组类型简单实例介绍

Oracle数组一般可以分为固定数组和可变数组
?固定数组

declare  
 type v_ar is varray(10) of varchar2(30);   
 my_ar v_ar:=v_ar('g','m','d','龚','帅');   
 begin  
       for i in 1..my_ar.count  
       loop   
           dbms_output.put_line(my_ar(i));   
       end loop;   
 end;  
 declare
 type v_ar is varray(10) of varchar2(30);
 my_ar v_ar:=v_ar('g','m','d','龚','帅');
 begin
       for i in 1..my_ar.count
       loop
           dbms_output.put_line(my_ar(i));
       end loop;
 end;
 
 --可变数组 
 --一维数组 
  
 declare  
 type v_table is table of varchar2(30) index by binary_integer;   
 --类型可以是前面的类型定义,index by binary_integer子句代表以符号整数为索引,   
 --这样访问表类型变量中的数据方法就是“表变量名(索引符号整数)”。   
 my_table v_table;   
 begin  
       for i in 1..20   
       loop   
           my_table(i):=i;   
           dbms_output.put_line(my_table(i));   
       end loop;   
 end;  
 declare
 type v_table is table of varchar2(30) index by binary_integer;
 --类型可以是前面的类型定义,index by binary_integer子句代表以符号整数为索引,
 --这样访问表类型变量中的数据方法就是“表变量名(索引符号整数)”。
 my_table v_table;
 begin
       for i in 1..20
       loop
           my_table(i):=i;
           dbms_output.put_line(my_table(i));
       end loop;
 end;
 
 --多维数组--多条记录 
 
 
 declare  
 type v_table is table of t_user%rowtype index by binary_integer;   
 my_table v_table;   
 begin  
       select * bulk collect into my_table from t_user;   
       for i in 1..my_table.count/10 --my_table.count/10取到的值为四舍五入值   
       loop   
           dbms_output.put_line('suser--'||my_table(i).suser);   
          dbms_output.put_line('name---'||my_table(i).name);   
           dbms_output.put_line('sex----'||my_table(i).sex);   
       end loop;   
 end;  
 declare
 type v_table is table of t_user%rowtype index by binary_integer;
 my_table v_table;
 begin
       select * bulk collect into my_table from t_user;
       for i in 1..my_table.count/10 --my_table.count/10取到的值为四舍五入值
       loop
           dbms_output.put_line('suser--'||my_table(i).suser);
           dbms_output.put_line('name---'||my_table(i).name);
           dbms_output.put_line('sex----'||my_table(i).sex);
       end loop;
 end;
 
 多维数组--单条记录 
 
  
 declare  
 type v_table is table of t_user%rowtype index by binary_integer;   
 my_table v_table;   
 begin  
       select * into my_table(9) from t_user where suser='admin';   
      --my_table(i) i可以为任意整数,但取值时必须保持以i一致;   
       dbms_output.put_line('--suser--'||my_table(9).suser||'--name--'||my_table(9).name);    
 end;  
 declare
 type v_table is table of t_user%rowtype index by binary_integer;
 my_table v_table;
 begin
       select * into my_table(9) from t_user where suser='admin';
       --my_table(i) i可以为任意整数,但取值时必须保持以i一致;
       dbms_output.put_line('--suser--'||my_table(9).suser||'--name--'||my_table(9).name); 
 end;
 
 --自定义数组 
  
 create or replace type varray_list as varray(30) of varchar2(50);   
 --使用自定义数组   
 create or replace procedure show_list(p_varlist in varray_list)   
 is  
 v_str varchar2(50);   
 begin  
       for i in 1..p_varlist.count    
       loop   
           v_str:=p_varlist(i);   
           dbms_output.put_line('v_str='||v_str);   
           dbms_output.put_line('p_varlist('||i||')='||p_varlist(i));   
       end loop;   
 end;   
   
 declare  
 my_var varray_list:=varray_list('g','m','d','龚','帅');   
 begin  
       show_list(my_var);    
 end;

?实例

--固定数组
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.count loop
      dbms_output.put_line(var_array(i));
  end loop;
end;
--可变数组
declare 
  type type_array is table of varchar2(20) index by binary_integer;
  var_array type_array;
begin 
  var_array(1):='aa';
  var_array(2):='bb';
  
  for i in 1..var_array.count loop
     dbms_output.put_line( var_array(i));
  end loop;
  
end;
--可变数组取表
declare
begin
  
end;
create or replace procedure proc_sto