/************************************************ * 名前リスト表示プログラム [2000/04/04 H.Aman] * ************************************************/ #include /* ecpg ライブラリを使用するためのヘッダ */ exec sql include sqlca; /* データベースとの通信でエラーが発生した場合の処理関数 */ void error_exit(void); int main(int argc, char* argv[]){ /* ホスト変数として ID と NAME を宣言 */ exec sql begin declare section; int ID; char NAME[256]; exec sql end declare section; /******* カーソル nlcursor の宣言 *******/ exec sql declare nlcursor cursor for select id, name from Name_list; /******* データベースに接続 *******/ /* 何らかのエラーが発生した場合は関数 error_exit() をコールする */ exec sql whenever sqlerror do error_exit(); /* データベース bookmark へユーザ dbuser として接続する */ exec sql connect to bookmark user dbuser; /* すべての行を読み終わると not found になるので,* * while ループを break するよう指定する */ exec sql whenever not found do break; /******* カーソルのオープン *******/ exec sql open nlcursor; while (1){ /******* データベースからの情報の取り出し *******/ exec sql fetch in nlcursor into :ID, :NAME; printf("id = %d : name = %s\n", ID, NAME); } /******* カーソルのクローズ *******/ exec sql close nlcursor; /******** データベースへの接続を切り離す ********/ exec sql commit; exec sql disconnect; return 0; } /* データベースとの通信でエラーが発生した場合の処理関数 */ void error_exit(void){ fprintf(stderr, "PostgreSQL error : %d[%.*s]\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc); exec sql whenever sqlerror continue; exec sql rollback; exec sql disconnect; exit(1); }