[pgsql-jp: 28670] カーソルを複数使う場合(カーソルのネスト?)について

nitta nittam @ isao.co.jp
2003年 1月 14日 (火) 15:35:16 JST


新田と申します。

ランキングシステムの改造をしています。
Postgresは詳しくないので初歩的な質問だとは思うのですが。
以下教えてください。

 ・プロシージャ1:ユーザIDより、スコア,順位等を「カーソル1」に格納
 ・プロシージャ2:プロシージャ1をコールして「カーソル1」の内容を返す
 
上記のようなプロシージャがすでにあり、
プロシージャ2で返却すべき項目が追加になりました。
そこで
 ・プロシージャ2:「カーソル1」と名前を「カーソル2」に格納
 (プロシージャ1は他からも共通で利用されており、また追加項目は
 別テーブルを参照するためプロシージャ2を改造)

(旧)
  curRet          REFCURSOR   := ''r1'';
    SELECT INTO curRet プロシージャ1(ユーザID);
    return curRet;
↓
(新)
  curRet          REFCURSOR   := ''r2'';
    OPEN curRet FOR
    SELECT  プロシージャ1(ユーザID), 名前
        FROM  テーブル2 WHERE UID = ユーザID;
    return curRet;

のように改造しようとしたのですが、プロシージャ1のエラー復帰の箇所
(旧)
OPEN curRet FOR SELECT nRet AS RTN_CODE;

のところをどう修正すべきかで悩んでしまいました。

Pg::connectdbを使用してのプロシージャ実行結果は
上記改造後にはカーソル1とカーソル2のfetch結果を参照
すなわち
if ( $result->resultStatus != PGRES_TUPLES_OK or $result2->resultStatus
!= PGRES_TUPLES_OK ) {
 エラー
}
とすべきなのだと思うのですが。
実はこのあたりがよくわかっていません。

どうぞよろしくご指導お願いいたします。





pgsql-jp メーリングリストの案内