Embedded SQL は、C/C++ プログラム・コードと擬似コードの組み合わせの環境です。従来の C/C++ コードの間に存在する擬似コードは、SQL 文のサブセットです。プリプロセッサは、embedded SQL 文を、アプリケーションを作成するためにコンパイルされる実際のコードの一部である関数呼び出しに変換します。
Embedded SQL プログラムの非常に簡単な例を次に示します。従業員 195 の姓を変更して Ultra Light データベース・レコードを更新します。
#include <stdio.h> EXEC SQL INCLUDE SQLCA; main( ) { db_init( &sqlca ); EXEC SQL WHENEVER SQLERROR GOTO error; EXEC SQL CONNECT "DBA" IDENTIFIED BY "sql"; EXEC SQL UPDATE employee SET emp_lname = 'Johnson' WHERE emp_id = 195; EXEC SQL COMMIT; EXEC SQL DISCONNECT; db_fini( &sqlca ); return( 0 ); error: printf( "update unsuccessful: sqlcode = %ld\n", sqlca.sqlcode ); return( -1 ); } |
この例は実際に使用するプログラムと比べてかなり簡単な内容ですが、Embedded SQL アプリケーションにおける次のような共通事項が示されています。
各 SQL 文には、キーワード EXEC SQL のプレフィクスが付いている。
各 SQL 文は、セミコロンで終わる。
標準の SQL では実装されていない Embedded SQL 文がある。INCLUDE SQLCA 文はその一例です。
Embedded SQL では、SQL 文のほかに、特定のタスクを実行するためにライブラリ関数が提供される。関数 db_init と db_fini は、ライブラリ関数呼び出しの 2 例です。
前述のサンプル・コードでは、Ultra Light データベースのデータを操作する前に含める必要のある初期化文が示されています。
次のコマンドを使用して、SQLCA (SQL Communication Area) を定義します。
EXEC SQL INCLUDE SQLCA; |
この定義は、最初の Embedded SQL 文でなければならないため、通常はインクルード・リストの最後に記述します。
アプリケーションに複数の .sqc ファイルがある場合は、各ファイルにこの行を含めます。
最初のデータベース処理として、db_init という Embedded SQL ライブラリ関数を呼び出す必要があります。この関数は、Ultra Light ランタイム・ライブラリを初期化します。この呼び出しの前に実行できるのは、Embedded SQL の定義文だけです。
db_init 関数を参照してください。
Ultra Light データベースに接続するには、SQL CONNECT 文を使用する必要があります。
前述のサンプル・コードでは、終了の準備に必要となる呼び出しの順序も示しています。
未処理の変更をコミットまたはロールバックします。
データベースを切断します。
db_fini というライブラリ関数を呼び出して、SQL の作業を終了します。
終了時に、コミットされていないデータベースの変更は、すべて自動的にロールバックされます。
この例では、SQL と C コード間の対話はまったくありません。C コードはプログラムのフロー制御だけを行います。WHENEVER 文はエラー・チェックに使用されています。エラー・アクション (この例では GOTO) は、いずれかの SQL 文がエラーになると実行されます。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |