CBLSQLERRORサービスルーチンは,埋め込みSQL文によるODBCインタフェース機能の使用時に,出力された実行時メッセージのエラー情報(COBOLメッセージ番号,SQLSTATE,SQLエラーコード)を取得します。
CALL 'CBLSQLERROR' USING 引数1
表29-4 CBLSQLERRORサービスルーチンのインタフェース領域
記述形式 | 内容 |
---|---|
01 データ名01. | CALL文のUSINGで指定するエラー情報取得領域の名前を指定する。 |
02 データ名02 PIC S9(9) | COBOLメッセージ番号 |
02 FILLER PIC X(7). | 予備。このサービスルーチンを呼び出す前にLOW-VALUE(X'00')を設定しなければならない。 |
02 データ名03 PIC X(5). | SQLSTATE |
02 データ名04 PIC S9(9) | SQLエラーコード |
02 FILLER PIC X(516). | 予備。このサービスルーチンを呼び出す前にLOW-VALUE(X'00')を設定しなければならない。 |
表29-5 引数1に設定されるエラー情報の説明
エラー情報 | 説明 |
---|---|
COBOLメッセージ番号 | 直前に実行された埋め込みSQL文で出力されたKCCC8000R-SからKCCC8026R-Sのメッセージ番号が設定されます。メッセージについては,マニュアル「COBOL2002 メッセージ」を参照してください。 |
SQLSTATE | ODBCドライバマネージャが返す診断コードが設定されます。詳細については,使用しているODBCドライバまたはDBMSのマニュアルを参照してください。 |
SQLエラーコード | データソース固有のネイティブエラーコードが設定されます。詳細については,使用しているODBCドライバまたはDBMSのマニュアルを参照してください。 |
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE1.
:
DATA DIVISION.
WORKING-STORAGE SECTION.
:
01 OP-1.
02 ERR-MSGNUMBER PIC S9(9) USAGE COMP.
02 FILLER PIC X(7) VALUE LOW-VALUE.
02 ERR-SQLSTATE PIC X(5).
02 ERR-SQLERRORCODE PIC S9(9) USAGE COMP.
02 FILLER PIC X(516) VALUE LOW-VALUE.
01 STMT-PROC PIC X(20).
01 戻り値 PIC S9(9) USAGE COMP.
:
EXEC SQL BEGIN DECLARE SECTION END-EXEC.
01 ODBC-DSN PIC X(10) VALUE 'SAMPLE'.
01 ODBC-UID PIC X(10) VALUE 'USER1'.
01 ODBC-PWD PIC X(10) VALUE 'USER1'.
EXEC SQL END DECLARE SECTION END-EXEC.
:
PROCEDURE DIVISION.
:
*>SQL文を実行できたかどうかを<埋め込み例外宣言>にて判断します。
EXEC SQL
WHENEVER SQLERROR PERFORM :エラー処理 … 1.
END-EXEC.
:
*>データソースに接続する。
MOVE 'データソースへの接続' TO STMT-PROC. … 2.
EXEC SQL
CONNECT :ODBC-UID IDENTIFIED BY :ODBC-PWD
USING :ODBC-DSN
END-EXEC.
:
*>表を参照する。
MOVE '表のデータ参照' TO STMT-PROC. … 2.
EXEC SQL
SELECT … 3.
END-EXEC.
:
*>データソースから切断する。
MOVE 'データソースから切断' TO STMT-PROC. … 2.
EXEC SQL
DISCONNECT
END-EXEC.
STOP RUN.
:
エラー処理. … 4.
PERFORM WITH TEST AFTER UNTIL 戻り値 NOT = ZERO
CALL 'CBLSQLERROR' USING OP-1
MOVE RETURN-CODE TO 戻り値
EVALUATE 戻り値
WHEN 0
DISPLAY STMT-PROC … 5.
*> << エラー情報判定,リカバリ処理 >>
:
WHEN -1
DISPLAY 'CBLSQLERRORが失敗しました。'
END-EVALUATE
END-PERFORM.
: