用游标一样可以做到.SQL> DECLARE
  2    TYPE refCousor IS REF CURSOR;
  3    cur_sal refCousor;
  4    Type_job emp.job%TYPE;
  5  BEGIN
  6    OPEN cur_sal FOR SELECT DISTINCT job FROM emp WHERE sal > 2000;
  7    LOOP
  8      FETCH cur_sal INTO Type_job;
  9      EXIT WHEN cur_sal%NOTFOUND;
 10      DBMS_OUTPUT.PUT_LINE('JOB is:'||Type_job);
 11    END LOOP;
 12    CLOSE cur_sal;
 13  END;
 14  /
JOB is:ANALYST
JOB is:MANAGER
JOB is:PRESIDENTPL/SQL 过程已成功完成。

解决方案 »

  1.   

    我感觉你的数组功能,用游标一样可以的。
    如 chanet(牧师) 所说的,你可以用些中间变量存储一些结果,应该可以满足了吧
      

  2.   

    for example:
    16:27:03 SQL> desc t1;
     名称                                      空?      类型
     ----------------------------------------- -------- ---------------------------- A                                                  NUMBER(38)16:27:19 SQL> select * from t1;
             1
             2
             3已用时间:  00: 00: 00.16
    16:27:22 SQL> create or replace procedure tes as
    16:27:26   2  type refcursor is ref cursor;
    16:27:26   3  i integer:=1;
    16:27:26   4  tp_a integer;
    16:27:26   5  cur refcursor;
    16:27:26   6  type arra is array(10) of integer;
    16:27:26   7  arr1 arra:=arra();
    16:27:26   8  begin
    16:27:26   9     open cur for select a from t1;
    16:27:26  10     loop
    16:27:26  11     fetch cur into tp_a;
    16:27:26  12       exit when cur%notfound;
    16:27:26  13       arr1.extend;
    16:27:26  14       arr1(i):=tp_a;
    16:27:26  15       dbms_output.put_line(arr1(i));
    16:27:26  16       i:=i+1;
    16:27:26  17     end loop;
    16:27:26  18     close cur;
    16:27:26  19  end;
    16:27:26  20  /过程已创建。已用时间:  00: 00: 00.32
    16:27:26 SQL>
    16:27:26 SQL> exec tes
    1
    2
    3PL/SQL 过程已成功完成。已用时间:  00: 00: 00.15