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

时间:2012-01-16 21:22:09

标签: php sql oracle stored-procedures

我试图在互联网上找到这个,但我可以在任何地方找到它。 我希望Oracle存储过程类似于:

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

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

1 个答案:

答案 0 :(得分:2)

我怀疑你不想返回数组。相反,我怀疑您希望存储过程返回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。