• 検索結果がありません。

SQL文の指定位置および指定順序

ドキュメント内 アプリケーション開発ガイド (埋込みSQL編) (ページ 87-90)

第3章 アプリケーションの作成

3.1 SQL 埋込み C プログラムの作成方法

3.1.2 SQL文の指定位置および指定順序

アプリケーション中に埋め込んで使用するSQL文には、実行文と非実行文があります。実行文は、データベースをアクセ スしたり、トランザクションの制御を行うために使用します。非実行文は、実行文で利用するカーソルの宣言やホスト変数 の宣言、例外条件発生時の動作を定義します。非実行文は、アプリケーションの実行対象にはなりません。したがって、

アプリケーション中のGOTO文などによる制御の影響を受けません。

なお、SQL文は、サーバのOS環境で使用できる範囲が異なります。SQL文の利用範囲については、“付録J SQL文の使 用範囲”を参照してください。

SQL文の一覧を以下に示します。

表3.1 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

分類 SQL文 備考

資源操作文 RELEASE TABLE文 実行文

利用者制御文 SET USER PASSWORD文 実行文

アクセス制御文 SET ROLE文 実行文

SQL埋込みCプログラムでの、SQL文の指定位置について説明します。

埋込みSQL宣言節の指定位置

埋込みSQL宣言節は、ホスト変数を定義するためのものです。埋込みSQL宣言節は、C言語仕様上で変数宣言が記述 可能な位置に記述します。なお、ホスト変数を参照するカーソル宣言や実行文の記述位置より、ソースファイル上で先行 して定義します。また、ホスト変数の変数名は、Cプログラムソース上で、一意にかつ、“SQL”以外で始まる名前にする必 要があります。

ホスト変数の宣言

ホスト変数は、アプリケーションとデータベースの間でデータの受渡しをするのに使用する変数です。すなわち、アプ リケーションで参照するデータをデータベースから取り出すため、または逆に、アプリケーションで設定したデータを データベースに格納するために、SQL文に指定する変数です。

ホスト変数の宣言は、埋込みSQL宣言節で行います。宣言の記述方法そのものは、C言語での変数の宣言と同じで す。以下に、ホスト変数の宣言の例を示します。

図3.2 ホスト変数宣言の例(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プログラムの関数内であればどの位置にも記述できます。埋込み例外宣言の意味と有効範囲に ついては、“3.1.4 SQL文の処理結果の確認”で説明します。

実行文の指定位置

データ操作文やトランザクション制御文などの実行文は、C言語の実行文が記述可能な位置ならどの位置にも記述でき ます。

INCLUDE文の指定位置

アプリケーション中に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);

}

ドキュメント内 アプリケーション開発ガイド (埋込みSQL編) (ページ 87-90)