我有一个存储函数,该函数返回varchar2表。 我想在选择中使用它
存储函数:-
create or replace PACKAGE TESTSTR AS
TYPE strings_t IS TABLE OF VARCHAR2 (4000);
FUNCTION strings
RETURN strings_t;
END TESTSTR;
select * from TABLE (TESTSTR.strings())
它抛出了无效的数据类型错误
ORA-00902:无效的数据类型
答案 0 :(得分:2)
如果要在PL / SQL之外使用列表,如您的帖子所述,则需要在数据库中定义OBJECT
类型。例如,
CREATE OR REPLACE TYPE my_string AS OBJECT (val varchar2(4000));
CREATE OR REPLACE TYPE my_string_t AS TABLE OF my_string;
...,然后使用my_string_t
代替您的PL / SQL strings_t
类型。
只要您的字符串列表少于32768个元素,您就可以使用预定义的SYS.ODCIVARCHAR2LIST
对象类型,从而省去了声明任何新对象类型的麻烦。
例如
CREATE OR REPLACE PACKAGE teststr AS
FUNCTION strings RETURN sys.odcivarchar2list;
END teststr;
CREATE OR REPLACE PACKAGE BODY teststr AS
FUNCTION strings RETURN sys.odcivarchar2list IS
l_list sys.odcivarchar2list;
BEGIN
SELECT rownum
BULK COLLECT INTO l_list
FROM DUAL
CONNECT BY ROWNUM <= 1000;
RETURN l_list;
END strings;
END teststr;
SELECT * FROM table(teststr.strings);
答案 1 :(得分:0)
使用以下选项创建函数,例如 功能字符串 返回string_t 流水线是 -将类型变量声明为空 开始 -把你的逻辑放在这里 管排(out_variable); 例外 -如果有的话 结束;
使用查询找出答案: 从表中选择*(tester.strings);