Symfoware Server アプリケーション開発ガイド(埋込みSQL編) - FUJITSU - |
目次 索引 |
付録A C言語のサンプルプログラム |
状態変数とメッセージ変数を使用し、SQL文の実行結果を確認するサンプルプログラムを以下に示します。サンプルプログラムには、SQL文実行時にエラーが発生した場合の処理を記述しています。
例1
状態変数およびメッセージ変数の内容をチェックし、エラーが発生している場合は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; }
例2
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; }
目次 索引 |