Если вы хотите использовать свой список за пределами 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);