- 締切済み
CでSQLのテーブルを読む
SQLのテーブルがあります。 レコードを1行ずつ読むソースを教えてください。 データベースはさっぱり分かりません。 create table mytable ( name text, age int ); このテーブルからint型のageを列挙したいと思います。 intを読むわけですから EXEC SQL BEGIN DECLARE SECTION; int i; EXEC SQL END DECLARE SECTION; が必要ですよね。あとはさっぱり分かりません。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- mi-si
- ベストアンサー率35% (200/567)
EXEC SQLが出てくると言うことは、組み込みSQLを使ったCのプログラムだと思いますが、組み込みSQLの説明をすると長くなるので、サンプルだけ(しかもチェェックしてません)。組み込みSQLは一応標準化はなされてますが、プリコンパイラ(組み込みSQLをCのプログラムに変換するもの。Pro*C/C++,ecpgなど)によって若干異なりますので。 /* 組み込みSQL用ヘッダ定義 */ EXEC SQL include sqlca; /* 以下で出来る処理系もあり (Pro*C/C++)*/ /* #include <sqlca.h> */ int dbconnect(username,password,host) { EXEC SQL CONNECT ... /* Database softによって違う。 */ ... } ind dbdisconnect() { EXEC SQL DISCONNECT ... /* Database softによって違う。 */ } void select () { /* ホスト変数定義 要らないプリコンパイラもある */ EXEC SQL BEGIN DECLARE SECTION; int i; EXEC SQL END DECLARE SECTION; /* SELECT カーソルの作成 カーソルは1行ずつ読み出す場合に使う */ EXEC SQL DECLIRE my_cursor CURSOR FOR SELECT age FROM mytable; /* NOT FOUNDの時の処理、この場合は、ループからbreakする。 */ EXEC SQL WHENEVER NOT FOUND DO break; /* カーソルの実行 */ EXEC SQL OPEN my_cursor; /* カーソルから1行呼び出して次の行へ移動 ageの値をホスト変数iに代入 */ for (;;) { EXEC SQL FETCH my_cursor INTO :i; printf ("%d\n",i); } /* カーソルのクローズ 必ずやること */ EXEC SQL CLOSE my_cursor; /* 以下処理系によっては不要 */ EXEC SQL COMMIT; }