SQL ステートメントを発行する C および C++ アプリケーション
SQL ステートメントは、実行可能ステートメントを使用できる個所であれば、C または C++ プログラムの任意の場所にコーディングできます。
CまたはC ++プログラムの各SQLステートメントは、EXEC SQLで始まり、セミコロン(;)で終わる必要があります。 EXECキーワードとSQLキーワードは1行に表示する必要がありますが、ステートメントの残りの部分は後続の行に表示できます。
通常は、大文字を使用して、すべての SQL キーワードを入力する必要があります。 その理由は、C 言語では大文字と小文字を区別するからです。 ただし、FOLDプリコンパイラー・サブオプションを使う場合、Db2 はSBCS SQL通常 IDの小文字を大文字に変換します。 ホスト言語プリコンパイラオプションについては、 表1 を参照してください。
また、ホスト変数名の大文字と小文字は、プログラム全体を通して 一致させなければなりません。 例えば、ホスト変数名が宣言で小文字である場合、 すべての SQL ステートメントで小文字を使用しなければなりません。 C プログラムにコーディングされる UPDATE ステートメントを コーディングすると、以下のようになります。
EXEC SQL
UPDATE DSN8D10.DEPT
SET MGRNO = :mgr_num
WHERE DEPTNO = :int_dept; - コメント
- C のコメント (/* ... */) は、ブランクが使用できる個所ならば、キーワード EXEC と SQL の間を除き、SQL ステートメント内のどこにでも置くことができます。 C 言語ステートメントでは、単一行コメント (行頭が //) を使用できますが
、組み込み SQL では使用できません。 組み込み SQL ステートメントの中で、SQL コメントを使用できます。 詳細は、 SQLコメントを参照してください。
コメントをネストできます。
コメントに EBCDIC DBCS 文字を含めるには、シフトアウトおよび シフトイン制御文字で文字を区切らなければなりません。 DBCS ストリング内の最初のシフトイン文字は、DBCS ストリングの 終わりのシグナルになります。
- SQL ステートメントの継続
- 逆スラッシュを使用すると、文字ストリング定数や区切り ID を次の行に継続することができます。 ただし、EBCDIC DBCS ストリング定数は、次の行に継続できません。
- 区切り文字
- C プログラム内の SQL ステートメントは、開始キーワード
EXEC SQLとセミコロン (;) で区切ります。 - 表およびビューの宣言
- C プログラムは、プログラムがアクセスする各表およびビュー を記述する場合に DECLARE TABLE ステートメントを使用する必要があります。 Db2 宣言生成プログラム (DCLGEN) を使って、 DECLARE TABLE ステートメントを生成できます。 詳細は、 DCLGEN(宣言生成 )を参照してください。
- Db2プリコンパイラーに処理されるSQLステートメントと変数宣言をソース・コードに組み込みます。
- 区分データ・セットのメンバーから SQL ステートメントまたは C ホスト変数宣言を組み込むには、ステートメントを組み込むソース・コードに、次の SQL ステートメントを追加します。
EXEC SQL INCLUDE member-name;SQL INCLUDE ステートメントはネストできません。 C
#includeステートメントは、SQL ステートメントまた は C ホスト変数宣言を組み込むためには使用できません。 - マージン
- Db2 プリコンパイラに他のマージンを指定しない限り、1列目から72列目までのコードSQLステートメントを指定します。 EXEC SQLが指定マージンにない場合、Db2 プリコンパイラーはその SQL ステートメントを認識しません。 Db2 コプロセッサには、マージン規定は適用されません。 Db2 コプロセッサは可変長ソース入力が可能です。
- 名称
- ホスト変数には、C で有効な名前であれば、どの名前でも使用できます。
- DBCS 文字は使用できません。
- 「DSN」で始まる外部入り口名またはアクセス・プラン名、および「SQL」で始まるホスト変数名またはマクロ名は、使用しないでください (大文字小文字の組み合わせに関係なく)。 これらの名前はDb2のために予約されています。
ポンド文字( '#')で始まるSQL識別子は、Cマクロステートメントとして解釈できます。
- NULL と NUL
- C と SQL では、NULL の語の使い方が異なります。 C 言語には、NULL 文字 (NUL)、NULL ポインター (NULL)、およ び NULL ステートメント (セミコロンだけのステートメント) があり ます。 C NULは、0に等しいと比較される単一の文字です。 C NULLは、有効なデータオブジェクトを指さない特別な予約済みポインター値です。 SQL の NULL 値は、すべての非 NULL 値と区別される特殊値であり、 値がないこと (非 NULL) を意味します。 NUL (または NUL 終止符) は C および C++ のヌル文字で、NULL は SQL のヌル値です。
- シーケンス番号
- Db2 プリコンパイラーは、シーケンス番号のないステートメントを生成します。 ( Db2 コプロセッサは、ソースがコンパイラによって読み込まれ修正されるため、この動作は実行しません。)
- ステートメント・ラベル
- SQL ステートメントの前に、ラベルを付けることができます。
- 3 文字表記文字
- C 言語の文字セットの一部の文字は、必ずしもすべてのキーボード上で使用可能とは限りません。 これらの文字は、3 文字表記 と呼ばれる 3 文字の文字列を使う と、C ソース・プログラムに入力できます。 サポートするトライグラフ文字は、Db2Cコンパイラがサポートするものと同じです。
- WHENEVER ステートメント
- SQL WHENEVER ステートメントの GOTO 文節のターゲットは、WHENEVER ステートメントの作用が及ぶ SQL ステートメントの有効範囲内になければなりません。
- C/C++ についての特殊な考慮事項
- C/370 のマルチタスク機能を使用すると、複数のタスクがSQLステートメントを実行するため、予期しない結果が発生する可能性があります。
- Db2 コプロセッサーを除いて、 C プリプロセッサーを実行する前に、Db2 プリコンパイラーを実行しなければなりません。
- Db2 コプロセッサーを除き、Db2プリコンパイラーはCプリプロセッサー・ディレクティブをサポートしません。
- C コードを含む条件付きコンパイラー指示は、アプリケーション・プログラムの
最初の C トークンの後ろに置くか、
あるいは
#includeプリプロセッサー指示を使って C プログラムに組み込まなければなりません。
C 言語のプリプロセッサー指示の詳細は、 該当する C 言語の資料を参照してください。
10 進浮動小数点ホスト・データ・タイプを使用するには、以下を行う必要があります。- z/OS® 1.10 またはそれ以上のもの( z/OS V1R10 XL C/C++ )を使用してください。
- C/C++ コンパイラー・オプション DFP を指定してコンパイルします。
- Db2コプロセッサーを有効にするには、SQL コンパイラー・オプションを指定します。
- C/C++ コンパイラー・オプション ARCH(7) を指定します。 これは、ソースで DFP タイプが使用される場合に DFP コンパイラー・オプションが必要とします。
- 「DEFINE(__STDC_WANT_DEC_FP__)」コンパイラー・オプションを指定します。
- SQL エラー・コードの処理
- CとC++アプリケーションは、Db2からのSQL エラーに関する詳細情報を請求できます。 詳細については、「CおよびC++アプリケーションでのSQLエラーコードの処理 」を参照してください。