アプリ版:「スタンプのみでお礼する」機能のリリースについて

よろしくお願いします。

Pro*Cで作成しているのですが、カーソルの宣言時に指定するSQLをIF文で分けようとすると、
コンパイル時に「PCC-W-02332, SQLの識別子を再定義しようとしました。」が表示されます。

IFの結果がどうであれ、カーソルが取得するレイアウトが同一かつ、OPEN後の処理も同じように処理するため、できれば同一のカーソル名で行いたいです。

以下は今の状態を簡略化したプログラミングですが、
どのように対処するのが良いのでしょう。

Oracle10.2です。
よろしくお願いします。

-------------------------------------------------------
int flg;
<中略>
if ( flg == 0 ) {
 EXEC SQL DECLARE curname CURSOR FOR
  SELECT tbl.col1, 'flgが0です' AS col2 FROM tbl
 ;
} else {
 EXEC SQL DECLARE curname CURSOR FOR
  SELECT tbl.col1, 'flgが0以外です' AS col2 FROM tbl
 ;
}

EXEC SQL OPEN curname;

EXEC SQL WHENEVER NOT FOUND DO BREAK;
while(1) {
 EXEC SQL FETCH rackBCCur INTO :retVals
 <略>
}

-------------------------------------------------------

A 回答 (1件)

すみません。

最近カーソル処理を書いてないんですが自分が思うにカーソル処理で帰ってくる行数は1行になるようSELECT文を書かなくてはいけなかった気がしますが。

この回答への補足

自己解決しました。
EXEC SQL PREPARE文を使えば良いようです。

ありがとうございました。

補足日時:2006/07/21 16:52
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
よろしくお願いします。

恐らくINTOで指定する変数のことだと思います。
カーソルで抽出の定義をして(このときは複数行)、FETCHのところでそこから1行抽出し、INTOで指定した変数に値を入れます。
このとき、INTOで指定した変数には1行しか入りません。

なので、ほとんどの場合はFORやWHILEでループをして、毎行FETCHすることになります。

お礼日時:2006/07/21 15:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A