Symfoware(R) Server RDBユーザーズガイド 応用プログラム開発編 - FUJITSU -
目次 索引 前ページ次ページ

上へ第2章 データベースを処理する応用プログラムの開発の概要
上へ2.1 SQL埋込みCプログラムの作成方法

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

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

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

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

◆ホスト変数の宣

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

ホスト変数の宣言は、埋込みSQL宣言節で行います。宣言の記述方法そのものは、C言語での変数の宣言と同じです。図:ホスト変数宣言の例(SQL埋込みCプログラム)に、ホスト変数の宣言の例を示します。

[図:ホスト変数宣言の例(SQL埋込みCプログラム)]

image

◆状態変数の宣

状態変は、処理結果の状態を応用プログラムに伝えるための変数です。状態変数には状態コードが設定されます。状態コーは、処理が正常に完了した、または処理中になんらかの例外条件が発生したという状態を表します。状態変数の変数名は“SQLSTATE”です。

SQLSTATEは長さ5桁の文字列型(char SQLSTATE[6])の変数であり、埋込みSQL宣言節で宣言します。埋込みSQLを使用する応用プログラム中では、状態変数を必ず宣言します。

◆メッセージ変数の宣

メッセージ変は、処理結果をメッセージとして応用プログラムに伝えるための変数です。メッセージ変数の変数名は“SQLMSG”です。

SQLMSGは文字列型の変数であり、埋込みSQL宣言節で宣言します。メッセージ変数の宣言のしかたを以下に示します。

char SQLMSG[n]

n:メッセージ変数の長さ(バイト数)であり、2以上32001以下の値を指定します。

メッセージ変数にメッセージが設定されるときの規則を以下に示します。

■カーソル宣言の指定位

カーソル宣は、Cプログラムソース上のどの位置にも記述できます。ただし、宣言したカーソル名を参照するカーソル系のSQL文より、ソースファイル上で先行して記述します。なお、カーソル名は、Cプログラムソース上で一意にすることが必要です。

■埋込み例外宣言の指定位

埋込み例外宣は、Cプログラムの関数内であればどの位置にも記述できます。埋込み例外宣言の意味と有効範囲については、“SQL文の処理結果の確認”で説明します。

■実行文の指定位

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

■INCLUDE文の指定位

応用プログラム中にINCLUDE文を指定することができます。インクルードファイには、SQL文およびC言語の言語テキストを記述できます。インクルードファイルに、ホスト変数および状態変数の宣言を格納しておくことにより、複数の応用プログラムで共通に使用する変数をまとめて宣言することができます。

図:INCLUDE文と表宣言の例(SQL埋込みCプログラム)に、INCLUDE文の例を示します。

■表宣

表宣言は、スキーマ名の修飾をしない表名を定義する宣言文です。表宣言で定義した表名を、それ以降のSQL文で記述する場合、スキーマ名を省略することができます。 図:INCLUDE文と表宣言の例(SQL埋込みCプログラム)に、表宣言の例を示します。

[図:INCLUDE文と表宣言の例(SQL埋込みCプログラム)]

[インクルードファイル“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);
      }

目次 索引 前ページ次ページ

All Rights Reserved, Copyright (C) 富士通株式会社 2003-2004