Конвертировать массив записей в refcursor - PullRequest
4 голосов
/ 03 сентября 2010

Вопрос в том, как вернуть l_array в качестве refcursor, так как используемый мной интерфейс может легко обрабатывать курсор, а не массив записей.

Plz help

  create or replace package sample 
  TYPE r_type is record( code number; description varchar2(50)); 
  TYPE tr_type IS TABLE OF r_type; l_rarray tr_type ; ind number:=0; 

  PROCEDURE getdata() IS
     CURSOR cur IS
        SELECT empid, empname, place, location FROM emp;
     TYPE epmid_aat IS TABLE OF emp.empid%TYPE INDEX BY BINARY_INTEGER;
     l_empid empid_aat;
  BEGIN
     k := 1;
     FOR j IN (SELECT DISTINCT empid FROM emp)
     LOOP
        l_empid(k) := j.empid;
        k := k + 1;
     END LOOP;
     FOR i IN cur
     LOOP
        FOR k IN l_empid.first .. l_empid.last
        LOOP
           IF l_empid(k) = i.empid THEN

              procedure2(i.emp_id);
           END IF;
        END LOOP;
     END LOOP;

  END getdata();

  PROCEDURE procedure2
  (
     empid_in       IN NUMBER,
     description_in IN VARCHAR2(20)
  ) IS
  BEGIN
     lrec.code := empid_in;
     lrec.description := description_in;
     l_rarray(ind) := lrec;
     ind := ind + 1;
  END procedure2;

  end;

Ответы [ 2 ]

2 голосов
/ 04 сентября 2012

Я думаю, что это должно быть так:

OPEN YourRefCursor
 FOR SELECT * FROM TABLE (Cast(l_rarray AS tr_type)); 
1 голос
/ 03 сентября 2010

Как то так.

    TYPE r_type is record ( code number; 
                   description varchar2(50)
                  ); 
    TYPE tr_type IS TABLE OF r_type; 

    l_rarray tr_type ;

    SELECT r_type(empid, empname)
    BULK COLLECT INTO l_rarray
    FROM emp;

    OPEN YourRefCursor
    SELECT *
    FROM TABLE (Cast(l_rarray AS r_type));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...