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);
”时,系统会告诉我存在“无效的数据类型”。我不确定是什么带来了这个问题。
答案 0 :(得分: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);
您将获得所需的结果。