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エラーコードの処理 」を参照してください。