Как получить результат массива из хранимой процедуры Oracle - PullRequest
2 голосов
/ 17 января 2012

Я пытаюсь найти это в интернете, но я могу найти это где угодно.Я хочу, чтобы хранимая процедура Oracle была примерно такой:

CREATE OR REPLACE PROCEDURE Read()
IS
   BEGIN
         SELECT * FROM Books;   
   END;
/

, которая получит меня как результат и массив.Поэтому я хочу получить в массиве PHP результат этой хранимой процедуры оракула.Можете ли вы изменить его?Итак, когда я получаю массив в PHP, я могу легко получить данные?Заранее спасибо!

1 Ответ

2 голосов
/ 17 января 2012

Я подозреваю, что вы не хотите возвращать массив.Вместо этого я подозреваю, что вы хотите, чтобы ваша хранимая процедура возвращала 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...