以下は、「3.2 キャラクタセット指定の注意事項」で例としてあげた部署
テーブルにレコードを追加する場合の、フィールドに応じた変数の宣言と
INSERT 文の記述例です。
#include <stdio.h>
EXEC SQL
SET DATABASE DB = "sample.gdb" ;
int main( int argc, char *argv[] )
{
BASED ON DEPARTMENTS.DEP_CODE db_dep_code ;
BASED ON DEPARTMENTS.DEP_NAME db_dep_name ;
/* データベースへの接続、トランザクションの開始など */
:
/* 変数への値の格納 */
db_dep_code = 1 ;
strcpy( db_dep_name, "第1営業部" ) ;
/* レコードの挿入 */
EXEC SQL
INSERT INTO DEPARTMENTS VALUES ( :db_dep_code, :db_dep_name ) ;
/* トランザクションのコミット、データベースとの接続解除など */
:
}
単一レコードを返す問い合わせ文は、SELECT INTO 文を使用して、非問い合わせ
文と同様の記述で実行させることができます。
単一レコードを返す問い合わせ文とは、プライマリキーとして定義されている
フィールド、またはユニークインデックスが定義されているフィールドに
一致条件を指定した SELECT 文や、COUNT()、SUM()、MAX() などの集合関数を
実行させる SELECT 文です。
#include <stdio.h>
EXEC SQL
SET DATABASE DB = "sample.gdb" ;
int main( int argc, char *argv[] )
{
long rec_count ;
/* データベースへの接続、トランザクションの開始など */
:
/* レコード数の集計 */
EXEC SQL
SELECT COUNT(*) INTO :rec_count FROM DEPARTMENTS ;
/* 結果の表示 */
printf( "レコード数:%d\n", rec_count ) ;
/* トランザクションのコミット、データベースとの接続解除など */
:
}
複数レコードを返す問い合わせ文を実行させる場合は、その結果を取り出す時に
カーソルを使用します。
以下は、部署テーブルの全てのレコードを取り出す場合の記述例です。
#include <stdio.h>
EXEC SQL
SET DATABASE DB = "sample.gdb" ;
int main( int argc, char *argv[] )
{
BASED ON DEPARTMENTS.DEP_CODE db_dep_code ;
BASED ON DEPARTMENTS.DEP_NAME db_dep_name ;
/* データベースへの接続、トランザクションの開始など */
:
/* カーソルの定義 */
EXEC SQL
DECLARE DEP_CSR CURSOR FOR
SELECT DEP_CODE, DEP_NAME FROM DEPARTMENTS ;
/* カーソルのオープン */
EXEC SQL
OPEN DEP_CSR ;
/* 最初の問い合わせ結果の取り出し */
EXEC SQL
FETCH DEP_CSR INTO :db_dep_code, :db_dep_name ;
/* レコード数分の繰り返し */
while( !SQLCODE )
{
/* 結果の表示 */
printf( "部署コード:%d\t部署名:%s\n", db_dep_code, db_dep_name ) ;
/* 次結果の取り出し */
EXEC SQL
FETCH DEP_CSR INTO :db_dep_code, :db_dep_name ;
}
/* カーソルのクローズ */
EXEC SQL
CLOSE DEP_CSR ;
/* トランザクションのコミット、データベースとの接続解除など */
:
}