目次 | 前項目 次項目 |
プログラム中にデータベース操作を記述する場合、基本的には「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 ) ; }
SET DATABASE 文により、使用するデータベースの指定を行っています。 この例では、「sample.gdb」が、カレントディレクトリにあることを前提と しています。データベース が他のディレクトリにある場合は、そのパス名も 含めて指定します。
SET DATABASE の後の「DB」は、データベースハンドルを保持しておくための 変数として使用されます。従って、C 言語や InterBase のキーワード以外の 任意の名称に置き換えることができます。(以降は、この変数「DB」を、 データベースハンドルと呼びます。)
プログラム中の EXEC SQL に続けて記述された SQL 文の実行時に、エラーが 発生した場合の分岐先を指定しています。この例では、プログラムの末尾の ラベル「Error_Proc」に分岐するように指定しています。
データベース接続時のキャラクタセットの指定を行っています。必ず CONNECT 文の前に指定しなければなりません。
データベースへの接続を行います。isql を使用した場合と異なるのは、CONNECT のパラメータとしてデータベース名では無く、(1) で指定したデータベース ハンドルを指定することです。
トランザクションを開始させます。
トランザクションをコミットして終了させます。
データベースとの接続を解除します。DISCONNECT のパラメータは、CONNECT と 同様にデータベースハンドルです。
InterBase が提供している、エラーコードとエラーメッセージを表示する関数 です。この関数の引数「isc_status」は、gpre によって自動的に定義され ます。SQL 文の実行時にエラーが発生すると、この isc_status にステータス コードが設定されています。
(2) によって、エラー発生時の分岐先を指定しました。しかし、既にエラーが 発生している状態なので、以降の ROLLBACK や DISCONNECT は、失敗してしまう 可能性があります。このような時に、エラー発生時の分岐先指定が有効なまま では、エラー処理の ROLLBACK が失敗してラベル「Error_Proc」に戻るという 動作を、無限に繰り返してしまう可能性があります。これを回避するために、 エラー処理として実行する SQL 文でエラーが発生しても無視するように指定 します。
トランザクションをロールバックして終了させます。
目次 | 前項目 次項目 |
InterBase for Linux & FreeBSD | Copyright(c) 1998 RIOS Corporation |