谢谢Michaelyfj(星星还是那颗星星)!能不能给我个例子呢?我返回参数必须用游标。

解决方案 »

  1.   

    二维数组只有9i才能支持create type mynum is varray(10) of varchar2(20);
    /
    create type mytable is varray(10) of mynum;
    /
    create procedure pro(p_table in out mytable)
    as
    begin
    for i in 1..10 loop
    for j in 1..10 loop
    p_table.extend;
    p_table(i)(j):=v1;
    end loop;
    end loop;
    end;
    /
    具体实现楼主想吧.
      

  2.   

    多谢 beckhambobo(beckham)兄,以前我问了一个关于二维数组的问题,也是老兄帮我解答的。
    但是我在测试的时候,系统报错:ORA-06531,引用未初始化的收集。
    另外,我必须返回的是一个游标。
      

  3.   

    我的游标类型声明在一个包中:
    create or replace package defpkg
    is
      type TCursor is ref cursor;
    end defpkg;如下是存储过程
    create or replace procedure test(rs out defpkg.TCursor) 
    is
      a1 varchar2(20);
      a2 varchar2(20);
      a3 varchar2(20);
      a4 varchar2(20);
      b1 varchar2(20);
      b2 varchar2(20);
      b3 varchar2(20);
      b4 varchar2(20);
    begin
      a1:='1';
      a2:='1';
      a3:='1';
      a4:='1';
      b1:='2';
      b2:='2';
      b3:='2';
      b4:='2';
      
      ……
    end;
      a1、a2、a3、a4以及b1、b2、b3、b4本是不相关的变量,但是现在我想把它们以一个二维表的形式返回:
      Col1     Col1     Col1   Col1
      ----     ----     ----   ----
       a1       a2       a3     a4
       b1       b2       b3     b4这个二维表我可以以临时表的方式实现,但是我现在希望不用临时表,直接把它们组合了,用一个游标返回。我不清楚就是如何把它们组合并通过游标返回。是否可以结合数组,如何实现,我也迫切希望知道。
       谢谢!
      

  4.   

    beckhambobo(beckham) 兄,没上线么?
      

  5.   

    呆了十多分钟,还是用临时表会省时间,用数组实现不了,而且数组也不知怎样让游标返回,或者以下给一个点嵌夸表的例子,看你能否想出更好方法
    create or replace type mytabletype as table of number;
    /create or replace function strtab(p_str in varchar2)
    return mytabletype
    as
    lstr varchar2(1000) default p_str||',';
    ln   number;
    ldata   mytabletype:=mytabletype();
    begin
    loop
      ln:=instr(lstr,',');
      exit when (nvl(ln,0)=0);
      ldata.extend;
      ldata(ldata.count):=ltrim(rtrim(substr(lstr,1,ln-1)));
      lstr:=substr(lstr,ln+1);
    end loop;
    return ldata;
    end;
    /SQL> select * from table(cast(strtab('11,12,13') as mytabletype));COLUMN_VALUE
    ------------
              11
              12
              13
      

  6.   

    beckhambobo(beckham)兄写的这个例子,我感觉table的用法好像数组,它二者之间用法有何区别呢?
    另外,返回的table可不可以有多列,列名是否可以指定?