检索内容o用户定义的表

时间:2016-07-29 09:02:05

标签: oracle function user-defined-types

我想做的是,在一个函数中我填充一个表(用户定义的类型),然后选择该表。

我做了如下:

1 /定义自定义类型:

create or replace TYPE "MVT_CD" AS OBJECT 
( 
  ACCOUNTPK NUMBER(19,0),
  ACCOUNTCODE VARCHAR2(255)  
)

2 /定义该类型的表

create or replace TYPE "MVT_TAB_CD"  AS TABLE OF MVT_CD

3 /宣布我的功能

create or replace FUNCTION OUTPUT_CD (BUS_DAY VARCHAR2, CODE_AGENCE VARCHAR2) RETURN CD_OUTPUT_TABLE AS
  RETVAL CD_OUTPUT_TABLE := CD_OUTPUT_TABLE();
  ...      
  MVT_TAB MVT_TAB_CD := MVT_TAB_CD();
  ...

BEGIN

   MVT_TAB.EXTEND;
   MVT_TAB(MVT_TAB.COUNT) :=  MVT_CD(123, ' ');

   MVT_TAB.EXTEND;
   MVT_TAB(MVT_TAB.COUNT) :=  MVT_CD(456, ' ');

   FOR I IN (
          SELECT  ACCOUNTPK, ACCOUNTCODE FROM MVT_TAB
   )LOOP
     RETVAL.EXTEND;
     RETVAL(RETVAL.COUNT) := I.ACCOUNTPK|| I.ACCOUNTCODE;
   END LOOP;
   ...
END

我使用的变量名为:MVT_TAB,我想做一个select来检索它的含义,并将后者用于我函数的另一部分。

当我尝试使用Comile时:ORA-000942在该行:

SELECT  ACCOUNTPK, ACCOUNTCODE FROM MVT_TAB

我考虑过使用BULK COLLECT,但我不知道自己是不是很好。

1 个答案:

答案 0 :(得分:0)

您只需将结构转换为表格:

SELECT  ACCOUNTPK, ACCOUNTCODE FROM table(MVT_TAB)