create or replace procedure pro_Sel_tbmeetmgrInfo(v_stoptime varchar2,
  v_strtime varchar2,
  v_endtime varchar2,
  v_ecid number,
  v_xunhuaimoshi number,
  v_huiyimoshi number,  --会议模式(1、一次性。2、周期性)
  v_roomidB varchar2,
  v_roomNameB varchar2,
  v_roomid out varchar2,
  v_roomName out varchar2) is
  TYPE StringArray IS VARRAY(100) of VARCHAR2(600) ;
  v_Result StringArray := StringArray(null,null,null,null,null,null,null,null) ;
  begin
    v_Result(1) := 'haods';
    v_Result(2) := 'haodsgd';
    v_Result(3) := 'tiantian';
    v_Result(4) := '晚睡';
    v_Result(5) := 'haods';
    v_Result(6) := 'haodsgd';
    v_Result(7) := 'tiantian';
    v_Result(8) := '晚睡';
    for i in 1..8 loop
        dbms_output.put_line('v_Result['||i||']='||v_Result(i));
       /*在这里需要查询表、并把表中的数据Out出去~~~表中的数据有很多!需要用到数组或者其它东西Out给程序!
         但是我在定义数组的时候就开始悲剧了、如果只定义两个null(不知道这个是初始化还是什么鬼东西)
         v_Result StringArray := StringArray(null,null);那么执行(Test)的时候就在v_Result(3) := 'tiantian';
         这行报错。如果加上四个null就在v_Result(5) := 'haods';这报错!
         希望各位给说说我该怎么用才能让数组作为Out参数返回出去、还有就是上面这个伤心的null、*/
    end loop;
  end;
我刚刚学Oralce没多久、不知道这玩意怎么弄、o(︶︿︶)o 唉!!!希望高手们给看看!可能我表达不是很清楚、希望大侠们能多多包含!!!

解决方案 »

  1.   

    1、对于返回一个数据集,最好使用游标。
    create or replace procedure test(out_set out sys_refcursor) is
    begin
    open out_set for select * from emp;
    end;
    /2、使用可变数组有长度限制,一旦声明后长度不能改变。
    你可以在语句前
    dbms_output.put_line('v_Result['||i||']='||v_Result(i));

    v_Result.extend; --但扩展不能超出你声明的1003、嵌套表没有元素限制。
    TYPE StringArray IS table of VARCHAR2(600) ;