目次 前項目  次項目

4.2 データベース操作の記述方法

プログラム中にデータベース操作を記述する場合、基本的には「EXEC SQL」 というキーワードに続けてSQL文を大文字で記述します。gpre は特に指定が無い 場合は、大文字で記述されたもののみを SQL 文として処理します。

以下は、データベース「sample.gdb」に接続する場合の、プログラムの記述例 です。ただし、このプログラムでは、データベースに接続し、トランザクション を開始して、何も行わずに終了しています。また、プログラム中の「‥‥ (x)」 は説明のための番号です。


#include <stdio.h>

EXEC SQL
    SET DATABASE DB = "sample.gdb" ;            ‥‥ (1)

int  main( int argc, char *argv[] )
{
    EXEC SQL
        WHENEVER SQLERROR GO TO Error_Proc ;    ‥‥ (2)

    EXEC SQL
        SET NAMES EUCJ_0208 ;                   ‥‥ (3)

    EXEC SQL
        CONNECT DB ;                            ‥‥ (4)

    EXEC SQL
        SET TRANSACTION ;                       ‥‥ (5)

    /* データ操作を行う場合は、この部分に記述します。 */

    EXEC SQL
        COMMIT ;                                ‥‥ (6)

    EXEC SQL
        DISCONNECT DB ;                         ‥‥ (7)

    exit( 0 ) ;

Error_Proc:

    isc_print_status( isc_status ) ;            ‥‥ (8)

    EXEC SQL
        WHENEVER SQLERROR CONTINUE ;            ‥‥ (9)

    EXEC SQL
        ROLLBACK ;                              ‥‥ (10)

    EXEC SQL
        DISCONNECT DB ;

    exit( 1 ) ;
}
      


(1) 使用するデータベースの指定

SET DATABASE 文により、使用するデータベースの指定を行っています。 この例では、「sample.gdb」が、カレントディレクトリにあることを前提と しています。データベース が他のディレクトリにある場合は、そのパス名も 含めて指定します。
SET DATABASE の後の「DB」は、データベースハンドルを保持しておくための 変数として使用されます。従って、C 言語や InterBase のキーワード以外の 任意の名称に置き換えることができます。(以降は、この変数「DB」を、 データベースハンドルと呼びます。)

(2) エラー発生時の分岐先の指定

プログラム中の EXEC SQL に続けて記述された SQL 文の実行時に、エラーが 発生した場合の分岐先を指定しています。この例では、プログラムの末尾の ラベル「Error_Proc」に分岐するように指定しています。

(3) キャラクタセットの指定

データベース接続時のキャラクタセットの指定を行っています。必ず CONNECT 文の前に指定しなければなりません。

(4) データベースへの接続

データベースへの接続を行います。isql を使用した場合と異なるのは、CONNECT のパラメータとしてデータベース名では無く、(1) で指定したデータベース ハンドルを指定することです。

(5) トランザクションの開始

トランザクションを開始させます。

(6) トランザクションのコミット

トランザクションをコミットして終了させます。

(7) データベースとの接続解除

データベースとの接続を解除します。DISCONNECT のパラメータは、CONNECT と 同様にデータベースハンドルです。

(8) エラーコードとエラーメッセージの表示

InterBase が提供している、エラーコードとエラーメッセージを表示する関数 です。この関数の引数「isc_status」は、gpre によって自動的に定義され ます。SQL 文の実行時にエラーが発生すると、この isc_status にステータス コードが設定されています。

(9) エラー発生時の分岐を解除

(2) によって、エラー発生時の分岐先を指定しました。しかし、既にエラーが 発生している状態なので、以降の ROLLBACK や DISCONNECT は、失敗してしまう 可能性があります。このような時に、エラー発生時の分岐先指定が有効なまま では、エラー処理の ROLLBACK が失敗してラベル「Error_Proc」に戻るという 動作を、無限に繰り返してしまう可能性があります。これを回避するために、 エラー処理として実行する SQL 文でエラーが発生しても無視するように指定 します。

(10) トランザクションのロールバック

トランザクションをロールバックして終了させます。


目次 前項目  次項目

InterBase for Linux & FreeBSD Copyright(c) 1998 RIOS Corporation