ホスト変数 とは、組み込み SQL ステートメントが参照する変数です。それによりデータベース・マネージャーとアプリケーション・プログラム間でデータをやり取りします。 SQL ステートメント でホスト変数を使用するときは、名前の接頭部にコロン (:) を付けてください。 ホスト言語ステートメント でホスト変数を使用するときは、コロンは省略してください。
ホスト変数はコンパイル済みホスト言語で宣言され、 BEGIN DECLARE SECTION および END DECLARE SECTION ステートメントで区切られます。プリコンパイラーは、これらのステートメントによって宣言を検出することができます。
注: | Java JDBC および SQLJ プログラムは、宣言セクションを使用しません。 Java のホスト変数は、通常の Java 変数宣言構文に従います。 |
ホスト変数は、ホスト言語のサブセットを用いて宣言されます。ホスト言語にサポートされている構文については、以下を参照してください。
以下の規則は、ホスト変数宣言セクションに当てはまります。
SQL ステートメントに関しては、ホスト変数がどの単一ソース・ファイルで実際に宣言されているかにかかわらず、すべてのホスト変数の効力範囲はグローバルです。したがって、ホスト変数の名前はソース・ファイル内で固有でなければなりません。
これは、DB2 プリコンパイラーがホスト変数の効力範囲をグローバルに変更するということではなく、定義されている効力範囲外にアクセスできるようにするということです。次の例を考えてください。
foo1(){ . . . BEGIN SQL DECLARE SECTION; int x; END SQL DECLARE SECTION; x=10; . . . } foo2(){ . . . y=x; . . . }
言語によっては、変数 x が foo2() 関数内で宣言されていなかったり、 x の値が foo2() 内で 10 に設定されていないため、どちらの場合も上記の例ではコンパイルが失敗します。こうした問題を避けるには、グローバル変数として x を宣言するか、 x をパラメーターとして foo2() 関数に渡すかのいずれかにする必要があります。以下のようにします。
foo1(){ . . . BEGIN SQL DECLARE SECTION; int x; END SQL DECLARE SECTION; x=10; foo2(x); . . . } foo2(int x){ . . . y=x; . . . }
ホスト変数の宣言の詳細については、以下を参照してください。
宣言生成プログラムは、データベース内の指定された表の宣言を生成することにより、アプリケーション開発の能率を高めることができます。これによって、アプリケーションに簡単に挿入できる組み込み SQL 宣言のソース・ファイルを作成します。 db2dclgn は、C/C++、Java、COBOL、FORTRAN の各言語をサポートします。
宣言ファイルを生成するには、 db2dclgn コマンドを次の形式で入力してください。
db2dclgn -d database-name -t table-name [options]
たとえば、 SAMPLE データベース内の STAFF 表の宣言を C 言語で出力ファイル staff.h に生成するには、次のコマンドを入力します。
db2dclgn -d sample -t staff -l C
生成される staff.h ファイルには以下が含まれます。
struct { short id; struct { short length; char data[9]; } name; short dept; char job[5]; short years; double salary; double comm; } staff;
db2dclgn の詳細については、コマンド解説書 を参照してください。
言語 | ソース・コード例 |
---|---|
C/C++ |
EXEC SQL BEGIN DECLARE SECTION; short dept=38, age=26; double salary; char CH; char name1[9], NAME2[9]; /* C comment */ short nul_ind; EXEC SQL END DECLARE SECTION; |
Java |
// Note that Java host variable declarations follow // normal Java variable declaration rules, and have // no equivalent of a DECLARE SECTION short dept=38, age=26; double salary; char CH; String name1[9], NAME2[9]; /* Java comment */ short nul_ind; |
COBOL |
EXEC SQL BEGIN DECLARE SECTION END-EXEC. 01 age PIC S9(4) COMP-5 VALUE 26. 01 DEPT PIC S9(9) COMP-5 VALUE 38. 01 salary PIC S9(6)V9(3) COMP-3. 01 CH PIC X(1). 01 name1 PIC X(8). 01 NAME2 PIC X(8). * COBOL comment 01 nul-ind PIC S9(4) COMP-5. EXEC SQL END DECLARE SECTION END-EXEC. |
FORTRAN |
EXEC SQL BEGIN DECLARE SECTION integer*2 age /26/ integer*4 dept /38/ real*8 salary character ch character*8 name1,NAME2 C FORTRAN comment integer*2 nul_ind EXEC SQL END DECLARE SECTION |
言語 | ソース・コード例 |
---|---|
C/C++ |
EXEC SQL FETCH C1 INTO :cm; printf( "Commission = %f\n", cm ); |
JAVA (SQLJ) |
#SQL { FETCH :c1 INTO :cm }; System.out.println("Commission = " + cm); |
COBOL |
EXEC SQL FETCH C1 INTO :cm END-EXEC DISPLAY 'Commission = ' cm |
FORTRAN |
EXEC SQL FETCH C1 INTO :cm WRITE(*,*) 'Commission = ', cm |