Я подозреваю, что вы не хотите возвращать массив.Вместо этого я подозреваю, что вы хотите, чтобы ваша хранимая процедура возвращала REF CURSOR
.
CREATE OR REPLACE PROCEDURE Read( p_rc OUT SYS_REFCURSOR )
AS
BEGIN
OPEN p_rc
FOR SELECT *
FROM books;
END;
Если вы действительно хотите вернуть массив из PL / SQL (который будет использовать значительно больше пространства PGA насервер среди других ресурсов), вы можете сделать
CREATE TYPE book_typ
AS OBJECT (
<<list of columns in BOOKS>>
);
CREATE TYPE book_tbl
AS TABLE OF book_typ;
CREATE OR REPLACE PROCEDURE Read( p_arr OUT book_tbl )
AS
BEGIN
SELECT <<list of columns>>
BULK COLLECT INTO p_arr
FROM books;
END;
Почти никогда не имеет смысла структурировать код таким образом, вместо того, чтобы возвращать REF CURSOR
.Это будет намного менее эффективно, использование гораздо большего количества серверных ресурсов сделает его менее масштабируемым и т. Д. Кроме того, существует множество способов генерировать XML непосредственно в PL / SQL.