要定义一个integer的数组做为输出结果,以前没写过!各位大哥帮帮忙,下面是我用一个很笨的办法!但现在输出个数变成不确定了再也不能用这种死办法了,而且操作起来也很不方便declare
       p_totalnum is varray(15) of integer;
create or replace procedure p_user_total
(
       p_kind integer:=0, --如果传入5,则则查询所有数据1、2、3、4分类代表各类型用户
       p_totalnum out integer,
       p_totalnum_591 out integer,    --返回统计结果
       p_totalnum_592 out integer,
       p_totalnum_593 out integer,
       p_totalnum_594 out integer,
       p_totalnum_595 out integer,
       p_totalnum_596 out integer,
       p_totalnum_597 out integer,
       p_totalnum_598 out integer,
       p_totalnum_599 out integer
)
isbegin
       
   select totalnumber  into p_totalnum  from t_middle_totaluser
    where areanumber = 591 and kind =p_kind ;
   select totalnumber  into p_totalnum_591  from t_middle_totaluser
    where areanumber = 591 and kind =p_kind ;
   select totalnumber  into p_totalnum_592  from t_middle_totaluser
    where areanumber = 592 and kind =p_kind ;
   select totalnumber  into p_totalnum_593  from t_middle_totaluser
    where areanumber = 593  and kind =p_kind ;
   select totalnumber  into p_totalnum_594  from t_middle_totaluser
    where areanumber = 594  and kind =p_kind ;
   select totalnumber  into p_totalnum_595  from t_middle_totaluser
    where areanumber = 595  and kind =p_kind ;
   select totalnumber  into p_totalnum_596  from t_middle_totaluser
    where areanumber = 596  and kind =p_kind ;
   select totalnumber  into p_totalnum_597  from t_middle_totaluser
    where areanumber = 597  and kind =p_kind ;
   select totalnumber  into p_totalnum_598  from t_middle_totaluser
    where areanumber = 598  and kind =p_kind ;
   select totalnumber  into p_totalnum_599  from t_middle_totaluser
    where areanumber = 599  and kind =p_kind ;exception
when others then
p_totalnum_591 := 0;
p_totalnum_592 := 0;
p_totalnum_593 := 0;
p_totalnum_594 := 0;
p_totalnum_595 := 0;
p_totalnum_596 := 0;
p_totalnum_597 := 0;
p_totalnum_598 := 0;
p_totalnum_599 := 0;end p_user_total;

解决方案 »

  1.   

    FUNCTION ....
        (
         bbbb IN VARCHAR2
        )
        RETURN gv_arr
        IS
            v_ret                 gv_arr := gv_arr(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
    c_size    CONSTANT INTEGER := 50;    BEGIN CASE
    WHEN ... THEN
        v_ret(1) := 'cccc' ;
    WHEN ... THEN
        v_ret(2) := '2222' ;
    ELSE

            END CASE ;        <<exit_here>> NULL;        RETURN v_ret;        EXCEPTION WHEN OTHERS THEN
                RETURN NULL;
        END ....;
      

  2.   

    见到过一个方法:
    declare 
    type rec_name is record
    (lastname varchar2(32),
    firstname varchar2(32));
    type var_array is table of rec_name;
    v_rec rec_name;
    v_arr var_array := var_array();
    begin
    v_arr.extend;
    v_rec.lastname := 'abc';
    v_rec.firstname := 'def';
    v_arr(1) := v_rec;
    dbms_output.put_line(v_arr(1).lastname);
    end;可以借助于record构造一个二维数组...
    不知道行否??