状態変数とメッセージ変数を使用し、SQL文の実行結果を確認するサンプルプログラムを以下に示します。サンプルプログラムには、SQL文実行時にエラーが発生した場合の処理を記述しています。
状態変数およびメッセージ変数の内容をチェックし、エラーが発生している場合はSQLSTATE値およびメッセージを出力する例
#include<stdio.h>
#include<string.h>
EXEC SQL BEGIN DECLARE SECTION;
char SQLSTATE[6];
char SQLMSG[256];
short number;
struct {
long num;
char name[21];
char atta[41];
short year;
} data;
EXEC SQL END DECLARE SECTION;
main(void){
memset( SQLSTATE, '\0' , 6 );
memset( SQLMSG, '\0' , 256 );
EXEC SQL CONNECT TO 'DB01';
if ( strcmp( SQLSTATE, "00000" ) != 0 ) {
printf( "SQLSTATE %s\n", SQLSTATE );
printf( "SQLMSG %s\n", SQLMSG );
}
number = 1;
/* データの取得 */
EXEC SQL SELECT COL01, COL02, COL03, COL04 INTO :data
FROM SCH01.TBL01
WHERE NUMBER = :number;
if ( strcmp( SQLSTATE, "00000" ) != 0 ) {
printf( "SQLSTATE %s\n", SQLSTATE );
printf( "SQLMSG %s\n", SQLMSG );
}
printf( "COL1=%d\n", data.num );
printf( "COL2=%s\n", data.name );
printf( "COL3=%s\n", data.atta );
printf( "COL4=%d\n", data.year );
EXEC SQL COMMIT WORK;
EXEC SQL DISCONNECT 'DB01';
return 1;
}WHENEVER文を使用し、SQL文の実行時にエラーが発生した場合、SQLSTATE値およびメッセージを出力する例
#include<stdio.h>
#include<string.h>
EXEC SQL BEGIN DECLARE SECTION;
char SQLSTATE[6];
char SQLMSG[256];
short number;
struct {
long num;
char name[21];
char atta[41];
short year;
} data;
EXEC SQL END DECLARE SECTION;
main(void){
memset( SQLSTATE, '\0' , 6 );
memset( SQLMSG, '\0' , 256 );
EXEC SQL WHENEVER SQLERROR GOTO :CONNECT_ERROR;
EXEC SQL CONNECT TO 'DB01';
EXEC SQL WHENEVER SQLERROR GOTO :STM_ERROR;
EXEC SQL WHENEVER NOT FOUND GOTO :NOT_FOUND_ERROR;
number = 1;
/* データの取得 */
EXEC SQL SELECT COL01, COL02, COL03, COL04 INTO :data
FROM SCH01.TBL01
WHERE NUMBER = :number;
printf( "COL1=%d\n", data.num );
printf( "COL2=%s\n", data.name );
printf( "COL3=%s\n", data.atta );
printf( "COL4=%d\n", data.year );
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL COMMIT WORK;
EXEC SQL DISCONNECT 'DB01';
return 1;
STM_ERROR:
printf( "SQLSTATE %s\n", SQLSTATE );
printf( "SQLMSG %s\n", SQLMSG );
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL COMMIT WORK;
EXEC SQL DISCONNECT 'DB01';
return 1;
NOT_FOUND_ERROR:
printf( "SQLSTATE %s\n", SQLSTATE );
printf( "SQLMSG %s\n", SQLMSG );
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK WORK;
EXEC SQL DISCONNECT 'DB01';
return 0;
CONNECT_ERROR:
printf( "SQLSTATE %s\n", SQLSTATE );
printf( "SQLMSG %s\n", SQLMSG );
return 1;
}