社内SEの徒然なる日記

NetCOBOLでSQLCAを使ってみる

SQLコミュニケーション領域(SQLCA)

SQLコミュニケーション領域(以下、SQLCAと記述)とは、SQLを実行した結果が格納される領域のことです。
SQLが実行されるたびにSQLCAの内容は書き換わります。

宣言

SQLCAは「 DATA DIVISION. 」 の 「 WORKING-STORAGE SECTION. 」 で記述します。
ホスト変数の宣言の直後か直前に記述します。


EXEC SQL BEGIN DECLARE SECTION END-EXEC.
*** ホスト変数の宣言 ***
EXEC SQL END DECLARE SECTION END-EXEC.
EXEC SQL INCLUDE SQLCA END-EXEC.


内部構造

SQLCAの内部は、プリコンパイラを通したソースから確認できます。
Ver.によって違いがあるようですが、私の環境ではこんな感じです。

【SQLCAの中身】

01 SQLCA GLOBAL.
05 SQLCAID PIC X(8).
05 SQLCABC PIC S9(9) COMPUTATIONAL.
05 SQLCODE PIC S9(9) COMPUTATIONAL.
05 SQLERRM.
49 SQLERRML PIC S9(4) COMPUTATIONAL.
49 SQLERRMC PIC X(70).
05 SQLERRP PIC X(8).
05 SQLERRD OCCURS 6 TIMES
PIC S9(9) COMPUTATIONAL.
05 SQLWARN.
10 SQLWARN0 PIC X(1).
10 SQLWARN1 PIC X(1).
10 SQLWARN2 PIC X(1).
10 SQLWARN3 PIC X(1).
10 SQLWARN4 PIC X(1).
10 SQLWARN5 PIC X(1).
10 SQLWARN6 PIC X(1).
10 SQLWARN7 PIC X(1).
05 SQLEXT PIC X(8).

【SQLCAの構造(一部)】

・SQLCODE - 最後に実行されたSQL文のステータスコードが格納される。

   0  ・・・ 正常

   >0 ・・・ 例外を検出。
         WHERE句の検索条件を満たす行がないか、SELECT INTOまたは
         FETCHで1行も戻されなかった場合。

   <0 ・・・ 致命的なエラーの発生

・SQLERRM

   SQLERRML ・・・ SQLERRMCに格納されているメッセージの長さ

   SQLERRMC ・・・ SQLCODEに格納されているエラーコードに対応
            するエラーメッセージ。

・SQLERRD(3)

   最後に実行されたSQL文で処理された行数。

なにで使うの?

NetCOBOLでは、ORACLE側でエラーが発生したとしても異常終了にはならず、処理が続行されます。
そこで、SQLCAのSQLCODEで直前のSQLの実行状態を確認したりします。

他には、UPDATE文を発行した時に、更新した件数を取得したい場合は、SQLERRD(3)を使用すれば件数を取得できます。

前回:NetCOBOLでのホスト変数の使い方
次回:NetCOBOLとOracleのデータ型の関係
投稿記事の一覧 : http://harikofu.blog.fc2.com/blog-entry-22.html

--- blog end ---

スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する