CREATE OR  REPLACE PROCEDURE test_proc (out 数组参数)  这个procedure该如何定义?

解决方案 »

  1.   

    http://topic.csdn.net/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),就象多维数组一样。        
      --单维数组    
       
       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;   
         
      --多维数组    
      
       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 */
      

  2.   

    create or replace procedure P_test (p_par_array out array)
    应该就可以了!