- 締切済み
NETCOBOLでFETCHのネストはできますか
VBでいう、最初のSQL発行でデータ抽出、ループしながら、入れ子のSQL発行をするような処理がNETCOBOLで苦戦しています。複数のカーソルオープンはできないのでしょうか。WindowsのVer10です。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- lzNBGOo0
- ベストアンサー率0% (0/0)
当方の環境、データベースはSQLSERVERで以下のようにしています。 <カーソル名>と <SQL文識別子>を切り替えるのがポイントです。 面倒なので、<カーソル名>と <SQL文識別子>は同じ名称を指定 しています。 1.事前の設定として、ODBC情報設定ツール[SQLDBCS.EXE]で、INIファイルを開き、 [拡張オプション]ボタン-カーソル同時実行-ROWVER に設定します。 2.COBOLのソースでは、動的SQLでカーソルを開くものとします。 *> カ-ソル定義の準備(PROCEDURE DIVISION.直下に記述しています) *> 同時に開く数を定義 EXEC SQL DECLARE CURSOR1 CURSOR FOR CURSOR1 END-EXEC. EXEC SQL DECLARE CURSOR2 CURSOR FOR CURSOR2 END-EXEC. *> カ-ソル1の定義とオープン *> SQL-TXT はSQL文を編集するための作業項目 *> SQL-TXT-PはSQL文を編集するための作業項目 MOVE SPACE TO SQL-TXT. MOVE 1 TO SQL-TXT-P. STRING "SELECT [CODE1] FROM [TABLE1] ORDER BY [CODE1];" DELIMITED BY SIZE INTO SQL-TXT POINTER SQL-TXT-P. EXEC SQL PREPARE CURSOR1 FROM :SQL-TXT END-EXEC. EXEC SQL OPEN CURSOR1 END-EXEC. <<エラー処理>> *> カ-ソル1のFETCH EXEC SQL FETCH CURSOR1 INTO :CODE1 END-EXEC. <<終了判定>> <<エラー処理>> *> カ-ソル2の定義とオープン *> カーソル1から取得した値で、カーソル2のSQL文組み立てます MOVE SPACE TO SQL-TXT. MOVE 1 TO SQL-TXT-P. STRING "SELECT [CODE2] FROM [TABLE2] " WHERE [CODE1]=? " " ORDER BY [CODE2];" DELIMITED BY SIZE INTO SQL-TXT POINTER SQL-TXT-P. EXEC SQL PREPARE CURSOR2 FROM :SQL-TXT END-EXEC. EXEC SQL OPEN CURSOR2 USING :CODE1 END-EXEC. <<エラー処理>> *> カ-ソル2のFETCH EXEC SQL FETCH CURSOR2 INTO :CODE2 END-EXEC. <<終了判定>> <<エラー処理>>
- SaKaKashi
- ベストアンサー率24% (755/3136)
どんなソースの記述なのか見せてもらえませんか?
- SaKaKashi
- ベストアンサー率24% (755/3136)
RDBMSでしょ。できますよ。
お礼
ご回答に対するお礼 あれから1ヶ月の間に回答があったのはあなただけでした。解決には至りませんでしたが、どなたか私の質問を見てくれた意味ですごく嬉しくなりました。ありがとうございました。
補足
ご回答ありがとうございます。 私も言語ツールが違ってもRDBMSという特性を信じています。しかし、NETCOBOLでは外側カーソルのSQL発行は問題ありませんが、内側カーソルでの応用が効かないです。簡単なサンプルコードでカーソルのネストを教えていただけませんか。
お礼
カーソル同時実行-ROWVERに設定することが必要なんですね。 早速行ってみます。大変参考になりました。 ありがとうございました。