如何在Oracle procedure中定义一个数组

http://topic.youkuaiyun.com/t/20060112/17/4513467.html
集合:是具有相同定义的元素的聚合。Oracle有两种类型的集合:  
  可变长数组(VARRAY):可以有任意数量的元素,但必须预先定义限制值。  
  嵌套表:视为表中之表,可以有任意数量的元素,不需要预先定义限制值。  
   
  在PL/SQL中是没有数组(Array)概念的。但是如果程序员想用Array的话,就得变通一下,用TYPE 和Table of Record来代替多维数组,一样挺好用的。  
  emp_type 就好象一个table 中的一条record 一样,里面有id, name,gender等。emp_type_array 象个table, 里面含有一条条这样的record (emp_type),就象多维数组一样。  
  --单维数组  
 
SQL code
        
        
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 || ' , best_employees= ' || best_employees(i)
        
        
|| ' , worst_employees= ' || worst_employees(i));
        
        
END LOOP;
        
        
END ;
        
        
 
      

   
  --多维数组  
 
SQL code
       
       
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 */
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值