| Symfoware Server アプリケーション開発ガイド(埋込みSQL編) - FUJITSU - |
目次
索引
![]()
|
| 第3章 アプリケーションの作成 | > 3.1 SQL埋込みCプログラムの作成方法 |
アプリケーション中に埋め込んで使用するSQL文には、実行文と非実行文があります。実行文は、データベースをアクセスしたり、トランザクションの制御を行うために使用します。非実行文は、実行文で利用するカーソルの宣言やホスト変数の宣言、例外条件発生時の動作を定義します。非実行文は、アプリケーションの実行対象にはなりません。したがって、アプリケーション中のGOTO文などによる制御の影響を受けません。
なお、SQL文は、サーバのOS環境で使用できる範囲が異なります。SQL文の利用範囲については、“SQL文の使用範囲”を参照してください。
SQL文の一覧を以下に示します。
|
分類 |
SQL文 |
備考 |
|---|---|---|
|
非カーソル系データ操作 |
単一行SELECT文 |
実行文 |
|
UPDATE文:探索 |
||
|
INSERT文 |
||
|
DELETE文:探索 |
||
|
カーソル系データ操作 |
カーソル宣言(DECLARE CURSOR) |
非実行文 |
|
OPEN文 |
実行文 |
|
|
CLOSE文 |
||
|
FETCH文 |
||
|
UPDATE文:位置づけ |
||
|
DELETE文:位置づけ |
||
|
動的SQL文 |
ALLOCATE DESCRIPTOR文 |
実行文 |
|
DEALLOCATE DESCRIPTOR文 |
||
|
DESCRIPTOR取得文 |
||
|
DESCRIPTOR設定文 |
||
|
PREPARE文 |
||
|
DEALLOCATE PREPARE文 |
||
|
DESCRIBE文 |
||
|
EXECUTE文 |
||
|
EXECUTE IMMEDIATE文 |
||
|
動的カーソル宣言 |
非実行文 |
|
|
動的OPEN文 |
実行文 |
|
|
動的FETCH文 |
||
|
動的CLOSE文 |
||
|
動的DELETE文:位置づけ |
||
|
動的UPDATE文:位置づけ |
||
|
ストアドプロシジャ |
CALL文 |
実行文 |
|
トランザクション制御文 |
COMMIT文 |
実行文 |
|
ROLLBACK文 |
||
|
SET TRANSACTION文 |
||
|
コネクション管理文 |
CONNECT文 |
実行文 |
|
SET CONNECTION文 |
||
|
DISCONNECT文 |
||
|
セション管理文 |
SET CATALOG文 |
実行文 |
|
SET SCHEMA文 |
||
|
SET SESSION AUTHORIZATION文 |
||
|
表宣言 |
表宣言 |
非実行文 |
|
埋込み例外宣言 |
WHENEVER文 |
非実行文 |
|
埋込みSQL宣言節 |
BEGIN DECLARE SECTION |
非実行文 |
|
END DECLARE SECTION |
||
|
資源操作文 |
RELEASE TABLE文 |
実行文 |
|
利用者制御文 |
SET USER PASSWORD文 |
実行文 |
|
アクセス制御文 |
SET ROLE文 |
実行文 |
SQL埋込みCプログラムでの、SQL文の指定位置について説明します。
埋込みSQL宣言節は、ホスト変数を定義するためのものです。埋込みSQL宣言節は、C言語仕様上で変数宣言が記述可能な位置に記述します。なお、ホスト変数を参照するカーソル宣言や実行文の記述位置より、ソースファイル上で先行して定義します。また、ホスト変数の変数名は、Cプログラムソース上で、一意にかつ、“SQL”以外で始まる名前にする必要があります。
ホスト変数は、アプリケーションとデータベースの間でデータの受渡しをするのに使用する変数です。すなわち、アプリケーションで参照するデータをデータベースから取り出すため、または逆に、アプリケーションで設定したデータをデータベースに格納するために、SQL文に指定する変数です。
ホスト変数の宣言は、埋込みSQL宣言節で行います。宣言の記述方法そのものは、C言語での変数の宣言と同じです。以下に、ホスト変数の宣言の例を示します。

状態変数は、処理結果の状態をアプリケーションに伝えるための変数です。状態変数には状態コードが設定されます。状態コードは、処理が正常に完了した、または処理中になんらかの例外条件が発生したという状態を表します。状態変数の変数名は“SQLSTATE”です。
SQLSTATEは長さ5桁の文字列型(char SQLSTATE[6])の変数であり、埋込みSQL宣言節で宣言します。埋込みSQLを使用するアプリケーション中では、状態変数を必ず宣言します。
メッセージ変数は、処理結果をメッセージとしてアプリケーションに伝えるための変数です。メッセージ変数の変数名は“SQLMSG”です。
SQLMSGは文字列型の変数であり、埋込みSQL宣言節で宣言します。メッセージ変数の宣言のしかたを以下に示します。
char SQLMSG[n] |
n:メッセージ変数の長さ(バイト数)であり、2以上32001以下の値を指定します。
メッセージ変数にメッセージが設定されるときの規則を以下に示します。
設定されるメッセージは1つだけです。
メッセージの長さがメッセージ変数の長さ(n)を超える場合、メッセージの先頭からn文字分設定されます。
カーソル宣言は、Cプログラムソース上のどの位置にも記述できます。ただし、宣言したカーソル名を参照するカーソル系のSQL文より、ソースファイル上で先行して記述します。なお、カーソル名は、Cプログラムソース上で一意にすることが必要です。
埋込み例外宣言は、Cプログラムの関数内であればどの位置にも記述できます。埋込み例外宣言の意味と有効範囲については、“SQL文の処理結果の確認”で説明します。
データ操作文やトランザクション制御文などの実行文は、C言語の実行文が記述可能な位置ならどの位置にも記述できます。
アプリケーション中にINCLUDE文を指定することができます。インクルードファイルには、SQL文およびC言語の言語テキストを記述できます。インクルードファイルに、ホスト変数および状態変数の宣言を格納しておくことにより、複数のアプリケーションで共通に使用する変数をまとめて宣言することができます。
表宣言は、スキーマ名の修飾をしない表名を定義する宣言文です。表宣言で定義した表名を、それ以降のSQL文で記述する場合、スキーマ名を省略することができます。INCLUDE文と表宣言の例を以下に示します。
[インクルードファイル“HOSTVAR”]
char SQLSTATE[6]; long STOCK; |
[SQL埋込みCプログラム]
EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL INCLUDE HOSTVAR;
EXEC SQL END DECLARE SECTION;
main(){
EXEC SQL DECLARE 在庫表 TABLE ON SCH1;
EXEC SQL SELECT 在庫数量 INTO :STOCK FROM 在庫表 WHERE 製品番号 = 240;
↑
スキーマ名修飾省略
printf("%d\n",STOCK);
} |
目次
索引
![]()
|