※ ChatGPTを利用し、要約された質問です(原文:カーソル宣言をIFで分けられませんか?)
カーソル宣言をIFで分けられませんか?
よろしくお願いします。
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
<略>
}
-------------------------------------------------------
お礼
早速のご回答ありがとうございます。 よろしくお願いします。 恐らくINTOで指定する変数のことだと思います。 カーソルで抽出の定義をして(このときは複数行)、FETCHのところでそこから1行抽出し、INTOで指定した変数に値を入れます。 このとき、INTOで指定した変数には1行しか入りません。 なので、ほとんどの場合はFORやWHILEでループをして、毎行FETCHすることになります。
補足
自己解決しました。 EXEC SQL PREPARE文を使えば良いようです。 ありがとうございました。