プライマリ・コンテンツに移動
Pro*C/C++プログラマーズ・ガイド
12c リリース1(12.1)
B71397-03
目次へ移動
目次
索引へ移動
索引

前
次

プログラミングのガイドライン

この項では、埋込みSQL構文、コーディング規則、C言語固有の機能および制限について説明します。簡単に参照できるように、項目をアルファベット順に記載してします。

コメント

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++形式のコメント(//)を使用できます。

定数

Lまたはlを接尾辞として付けると、long int型定数に指定されます。Uまたはuを接尾辞として付けると、符号なし整数定数に指定されます。0Xまたは0xを接頭辞として付けると、16進整数定数に指定されます。Fまたはfを接尾辞として付けると、float型浮動小数点定数に指定されます。これらの書式は、SQL文では使用できません

宣言部

宣言部にはホスト変数宣言が含まれており、その形式は次のとおりです。

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;

この2つの文の間に指定できるのは、次の要素のみです。

  • ホスト変数および標識変数の宣言

  • 非ホスト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++コードが生成される方法が決まります。このオプションは、コマンドラインまたは構成ファイルに入力できます。

ANSI_C

CODE=ANSI_Cを指定してプログラムをプリコンパイルすると、プリコンパイラにより完全にプロトタイプ化された関数宣言が生成されます。次に例を示します。

extern void sqlora(long *, void *); 

KR_C

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固有の構造体も生成できます。

CPP

CODE=CPPを指定してコンパイルすると、C++互換の関数プロトタイプが生成されます。このオプション設定は、C++コンパイラで使用してください。

関連項目:

C++使用の詳細は、C++アプリケーションを参照してください。

ヒントの長さ

埋込みSQL文におけるSQLヒントの最大長は256文字に制限されます。この制限を超えるヒントはすべて切り捨てられます。

ホスト変数名

ホスト変数名には、大文字または小文字、数字およびアンダースコアを使用できますが、最初の文字は英字にする必要があります。長さは任意ですが、Pro*C/C++にとって重要なのは最初の31文字のみです。Cコンパイラやリンカーによっては最大長が短い場合があるため、使用するCコンパイラのユーザーズ・ガイドで確認してください。

移植性を考慮する場合は、ホスト変数名を18文字以下(SQL標準での長さの要件)に制限することもできます。

関連項目:

アプリケーションでの使用に制限のある語のリストは、予約語、キーワードおよびネームスペースを参照してください。

行の継続

SQL文は、ある行から次の行に続けることができます。文字列リテラルをある行から次の行に続ける場合は、次のようにバックスラッシュ(\)を使用する必要があります。

EXEC SQL INSERT INTO dept (deptno, dname) VALUES (50, 'PURCHAS\ 
ING'); 

このコンテキストでは、バックスラッシュはプリコンパイラで継続文字として扱われます。

行の長さ

行の最大長は、ASCII文字のみを含む行の場合は1299、マルチバイト文字の場合は324です。

MAXLITERALのデフォルト値

MAXLITERALプリコンパイラ・オプションを使用すると、プリコンパイラで生成される文字列リテラルの最大長を指定できます。MAXLITERALのデフォルト値は1024です。必要に応じて、より小さい値を指定してください。たとえば、Cコンパイラで513文字以上の文字列リテラルを処理できない場合は、MAXLITERAL=512と指定します。使用しているCコンパイラのユーザーズ・ガイドを参照してください。

演算子

論理演算子と関係演算子「equal to」は、CとSQLでは次のリストのように異なります。これらのC演算子は、SQL文では使用できません

SQL演算子 C演算子

NOT

!

AND

&&

OR

||

=

==

次のC演算子も、SQL文では使用できません

タイプ C演算子

アドレス

&

ビット単位

&, |, ^, ~

コンパウンド代入

+=、-=、*=など

条件付き

?:

減分

--

増分

++

インダイレクション

*

剰余

%

シフト

>>,<<

文の終了記号

埋込みSQL文の終わりには、次のように常にセミコロン(;)を付けます。

EXEC SQL DELETE FROM emp WHERE deptno = :dept_number;