如何将关联数组转换为游标(SYS_REFCURSOR)

时间:2014-07-11 06:38:45

标签: oracle plsql cursors

我是oracle系列的新手。所以请指导我将关联数组转换为游标(SYS_REFCURSOR)。

/*-----------my snippnet like this---*/
/*--declared in package*/
TYPE GENARRAY IS TABLE of NUMBER INDEX BY BINARY_INTEGER;
/*--defined in package body*/
1.FUNCTION GETXXX_GETFOLDERS1 (IN_ARRAY GENARRAY) RETURN SYS_REFCURSOR AS
OUTTABLE GENARRAY; 
GRPID NUMBER;
VCOUNT NUMBER:=0;
return_cursor SYS_REFCURSOR;
2. BEGIN 
FOR I IN 1..IN_ARRAY.COUNT LOOP

3. VCOUNT:=VCOUNT+1;
4.  SELECT GROUPID INTO GRPID FROM DMBI_GROUPDETAIL WHERE GROUPNAME IN (IN_ARRAY(I));
OUTTABLE(VCOUNT):=GRPID;
END LOOP;

5. Open return_cursor FOR
SELECT * FROM TABLE (CAST(OUTTABLE AS GENARRAY));

6. RETURN return_cursor;
END GETXXX_GETFOLDERS1; 

----ERROR on line which is in bold-----
Error(5): PL/SQL: SQL Statement ignored
Error(5): PL/SQL: ORA-00902: invalid datatype
---------------------------------------------------

1 个答案:

答案 0 :(得分:0)

/*--declared in package*/

TYPE GENARRAY是BINARY_INTEGER的数字索引表;

  • 不是您需要的正确数据结构。根据你的评论我假设类型在包中声明;但是你在演员表中使用那种类型的变量:

    SELECT * FROM TABLE(CAST(外观为GENARRAY));

你只能使用自定义SQL类型(不是pl / sql类型)。 你需要:

create type  GENARRAY IS TABLE of NUMBER ;

你还需要一些不同的变量用法。 Docs