0
CREATE OR REPLACE
PACKAGE PKG
AS
TYPE RESULT_T
IS
  TABLE OF VARCHAR2(3000);
FUNCTION GENERATEF
  RETURN RESULT_T ;
END PKG;
/
CREATE OR REPLACE
PACKAGE BODY PKG
AS
FUNCTION GENERATEF
  RETURN RESULT_T
IS
  i_t RESULT_T := RESULT_T();
BEGIN

  FOR TLC IN 1..3
  LOOP
    i_t.extend;
    i_t(i_t.last) := tlc;
  END LOOP;
  RETURN i_t;
END;
END PKG;
/

当我想执行“ select * from table(pkg.GENERATEF);”时,系统告诉我有一个“无效的数据类型”。我不确定是什么带来了问题。

4

1 回答 1

2

此类型RESULT_T不是全局定义的,因此 Oracle(或任何 DBMS)无法识别此类型,因此无法将输出转换为表格形式。

您可以在包外将此类型指定为 -

Create or Replace TYPE RESULT_T IS
  TABLE OF VARCHAR2(3000);

然后从你的包中删除这种类型的定义 -

CREATE OR REPLACE PACKAGE Pkg AS
  /*TYPE RESULT_T
  IS
    TABLE OF VARCHAR2(3000);*/
  FUNCTION Generatef RETURN Result_t;
END Pkg;
/
CREATE OR REPLACE PACKAGE BODY Pkg AS
  FUNCTION Generatef RETURN Result_t IS
    i_t Result_t := Result_t();
  BEGIN

    FOR Tlc IN 1 .. 3 LOOP
      i_t.EXTEND;
      i_t(i_t.LAST) := Tlc;
    END LOOP;
    RETURN i_t;
  END;
END Pkg;
/

然后当你查询 -

select * from table(pkg.GENERATEF);你会得到你想要的结果。

于 2013-05-13T06:52:16.910 回答