如何从Oracle存储过程中获取数组结果


How to get array result from Oracle stored procedure

我试图在互联网上找到它,但我可以在任何地方找到。我想让Oracle存储过程像这样:

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

这将得到结果和数组。所以我想在PHP数组中检索这个oracle存储过程的结果。你能修改一下吗?所以当我在php中获得数组时,我可以很容易地通过数据获取?提前谢谢!

我怀疑您不想返回数组。相反,我怀疑您希望存储过程返回一个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几乎是没有意义的。它的效率将大大降低,使用更多的服务器资源,使其可扩展性大大降低,等等。此外,有多种方法可以直接在PL/SQL中生成XML。