2012-01-16 27 views
2

私はこれをインターネット上で見つけようとしていますが、どこでも見つけることができます。Oracleストアドプロシージャから配列結果を取得する方法

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

結果、配列として私を取得します: は、私のようなOracleのストアドプロシージャの何かを持っていると思います。だから私はPHP配列のこのOracleストアドプロシージャの結果を取得したい。あなたはそれを修正していただけますか? PHPで配列を取得すると、データを簡単に取得できますか? ありがとうございます!

答えて

2

あなたは配列を返さないと思っています。代わりに、私はあなたのストアドプロシージャがREF CURSORを返すようにしたいと思う。

CREATE OR REPLACE PROCEDURE Read(p_rc OUT SYS_REFCURSOR) 
AS 
BEGIN 
    OPEN p_rc 
    FOR SELECT * 
     FROM books; 
END; 

あなたは本当に(他のリソースの中のサーバー上で非常に多くのPGAのスペースを使用しようとしている)PL/SQLからの配列を返すようにしたい場合は、あなたが

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を生成する方法はさまざまです。

+0

問題アレイを読み込んでXMLに変換するクラスがあるので、実際には配列を返すようにしたいのですが、これはカーソルのために見ました。カーソルの代わりに配列に対してこれを行うことは可能ですか? – Denonth

+0

誰でも知っているかもしれませんか? – Denonth

+0

@Denmonth - 私は、PL/SQL配列をoutパラメータとして持つアプローチを含めるように答えを広げました。 –

関連する問題