こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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;

が必要ですよね。あとはさっぱり分かりません。

投稿日時 - 2004-02-26 02:16:56

QNo.790081

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

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;
}

投稿日時 - 2004-02-26 09:06:35