SQL文には、空白を挿入できる位置(EXEC SQLキーワードの間以外)であれば、任意の位置にC言語の形式のコメント(/* ... */)を記述できます。また、SQL文の行末には、次の例のようにANSI形式のコメント(-- ...)も挿入できます。
EXEC SQL SELECT ENAME, SAL INTO :emp_name, :salary -- output host variables FROM EMP WHERE DEPTNO = :dept_number;
CODE=CPPプリコンパイラ・オプションを使用してプリコンパイルする場合は、Pro*C/C++ソース内でC++形式のコメント(//)を使用できます。
宣言部にはホスト変数宣言が含まれており、その形式は次のとおりです。
EXEC SQL BEGIN DECLARE SECTION; /* Declare all host variables inside this section: */ char *uid = "username/password"; ... EXEC SQL END DECLARE SECTION;
EXEC SQL BEGIN DECLARE SECTION;
次の文で終了します。
EXEC SQL END DECLARE SECTION;
ホスト変数および標識変数の宣言
非ホストC/C++変数
EXEC SQL DECLARE文
EXEC SQL INCLUDE文
EXEC SQL VAR文
EXEC SQL TYPE文
EXEC ORACLE文
C/C++コメント
宣言部が必要になるのは、MODE=ANSIまたはCODE=CPP(C++アプリケーション内)、PARSE=NONEまたはPARTIALの場合です。PARSEオプションの詳細は、コードの解析についても参照してください。
宣言部は複数使用できます。異なるコード・モジュールでもかまいません。
Cでは1文字を区切る場合、一重引用符を次のように使用します。
ch = getchar(); switch (ch) { case 'U': update(); break; case 'I': insert(); break; ...
SQLでは文字列を区切る場合、一重引用符を次のように使用します。
EXEC SQL SELECT ENAME, SAL FROM EMP WHERE JOB = 'MANAGER';
C言語では文字列を区切る場合、二重引用符を次のように使用します。
printf("\nG'Day, mate!");
SQLでは特殊文字または小文字を含む識別子を区切る場合、二重引用符を次のように使用します。
EXEC SQL CREATE TABLE "Emp2" (empno number(4), ...);
Pro*C/C++で処理できるソース・ファイルの長さには制限があります。許容される行数には制限があります。ファイル・サイズの制約となる要因には、ソース・ファイルの次のような側面があります。
埋込みSQL文の複雑さ(バインド変数と定義変数の数など)
データベース名の使用の有無(AT句を使用してデータベースに接続するなど)
埋込みSQL文の数
この制限に関連した問題を防ぐには、複数のプログラム単位を使用してソース・ファイルのサイズを小さくします。
ANSI C規格(X3.159-1989)は、関数プロトタイプを提供しています。関数プロトタイプでは、関数およびその引数のデータ型を宣言しており、Cコンパイラでは欠落している引数や一致しない引数を検出できます。
CODEオプションにより、プリコンパイラでCまたはC++コードが生成される方法が決まります。このオプションは、コマンドラインまたは構成ファイルに入力できます。
CODE=ANSI_Cを指定してプログラムをプリコンパイルすると、プリコンパイラにより完全にプロトタイプ化された関数宣言が生成されます。次に例を示します。
extern void sqlora(long *, void *);
CODE=KR_C(KRは「Kernighan and Ritchie」を表します)オプションを指定してプリコンパイルすると、関数のパラメータ・リストがコメント・アウトされていることを除き、ANSI_Cを指定した場合と同じように関数プロトタイプが生成されます。次に例を示します。
extern void sqlora(/*_ long *, void * _*/);
したがって、ANSI CがサポートされていないCコンパイラを使用する場合は、必ずプリコンパイラ・オプションCODEをKR_Cに設定してください。CODEオプションをANSI_Cに設定すると、プリコンパイラではconst型の修飾子など、他のANSI固有の構造体も生成できます。
CODE=CPPを指定してコンパイルすると、C++互換の関数プロトタイプが生成されます。このオプション設定は、C++コンパイラで使用してください。
関連項目:
C++使用の詳細は、C++アプリケーションを参照してください。
ホスト変数名には、大文字または小文字、数字およびアンダースコアを使用できますが、最初の文字は英字にする必要があります。長さは任意ですが、Pro*C/C++にとって重要なのは最初の31文字のみです。Cコンパイラやリンカーによっては最大長が短い場合があるため、使用するCコンパイラのユーザーズ・ガイドで確認してください。
移植性を考慮する場合は、ホスト変数名を18文字以下(SQL標準での長さの要件)に制限することもできます。
関連項目:
アプリケーションでの使用に制限のある語のリストは、予約語、キーワードおよびネームスペースを参照してください。
SQL文は、ある行から次の行に続けることができます。文字列リテラルをある行から次の行に続ける場合は、次のようにバックスラッシュ(\)を使用する必要があります。
EXEC SQL INSERT INTO dept (deptno, dname) VALUES (50, 'PURCHAS\ ING');
このコンテキストでは、バックスラッシュはプリコンパイラで継続文字として扱われます。