0

私はストアド プロシージャを使用しており、それらを PHP から呼び出しています (Java アプリでも同じ手順を使用しています)。

今、私はこのようにしています(これはうまくいきます):

if(!($result = pg_query($connection, 'BEGIN; SELECT '.$query.'; FETCH ALL IN '.self::$cursor.';'))) return NULL;

whereは " "$queryのようなもので、カーソル名なので "ref_cursor" です (はい、ハックのように思えます...)。CALL create_account('foo', 'bar', 'etc')$cursor

私は手順 (および準備済みステートメント) の利点について知っていますが、上記を実行する意味があるかどうか疑問に思っています。私の知る限り、プロシージャはプリコンパイルされていますが、上記のクエリはそうではありません。それで、これでパフォーマンスが向上すると信じて自分をだましているだけですか?私は自分の手順に縛られています。なぜなら、Java に手順を作成する自動生成プログラムがあるからです。この場合、PDO を使用する方が良いでしょうか? ネットで pgsql ref カーソル + pdo に関するものを検索しましたが、あまり見つかりませんでした。PDO の準備済みステートメントを使用できることはわかっていますが、それは私の手順とはうまくいきません。

-イングベ

4

1 に答える 1

1

「より良い方法」は pg_query_params を使用することですが、一度に 1 つのクエリ/ステートメントのみを送信します。

 pg_query_params('SELECT procedure_name($1, $2);'.array('foo','bar'));
于 2010-07-30T12:44:25.217 に答える