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

前
次

標識変数

ホスト変数はすべて、オプションのインジケータ変数に関連付けることができます。標識変数は、2バイトの整数として定義する必要があります。また、SQL文中では、標識変数の前にコロンを付けてホスト変数の直後に指定する必要があります(INDICATORキーワードを使用しない場合)。宣言部を使用する場合は、宣言部中でも標識変数を宣言する必要があります。

これはリレーショナル列に適用されるもので、オブジェクト型には適用されません。

関連項目:

オブジェクト

INDICATORキーワード

判読しやすくするため、それぞれの標識変数の前にINDICATORのオプションのキーワードを置くこともできます。その場合も、標識変数の前にはコロンを付ける必要があります。正しい構文は、次のとおりです。

:host_variable INDICATOR :indicator_variable 

これは次の構文と同じ意味です。

:host_variable:indicator_variable 

ホスト・プログラムでは、両方の形式の式を使用できます。

可能なインジケータの値とその意味は、次のとおりです。

インジケータの値 意味

0

操作は成功しました。

-1

NULLが戻されたか、挿入または更新されました。

-2

LONG型の文字ホスト変数の出力は、長すぎる部分が切り捨てられましたが、元の列の長さは判別できません。

>0

SELECTまたはFETCHの結果として文字ホスト変数に入ったデータは、長すぎる文が切り捨てられました。この場合、そのホスト変数がマルチバイト・キャラクタ変数であれば、インジケータの値は元の列の長さを文字数で表したものになります。そのホスト変数がマルチバイト・キャラクタ変数でなければ、インジケータの長さは元の列の長さをバイト数で表したものになります。

標識変数の使用例

通常、標識変数は、入力ホスト変数へのNULLの割当てと、出力ホスト変数に含まれるNULLまたは切捨て値の検出に使用されます。次の例では、3つのホスト変数と1つの標識変数を宣言してから、SELECT文を使用して、ホスト変数emp_numberの値と一致する従業員番号をデータベース内で検索します。一致する行が見つかると、出力ホスト変数salaryおよびcommissionが、その行の列SALおよびCOMMの値に設定され、リターン・コードが標識変数ind_commに格納されます。後継の文では、ind_commを使用してその後の処理を選択しています。

EXEC SQL BEGIN DECLARE SECTION; 
    int    emp_number; 
    float  salary, commission; 
    short comm_ind;  /* indicator variable  */
EXEC SQL END DECLARE SECTION;
    char temp[16];
    float  pay;      /* not used in a SQL statement */
...
printf("Employee number? "); 
gets(temp);
emp_number = atof(temp);
EXEC SQL SELECT SAL, COMM 
    INTO :salary, :commission:ind_comm 
    FROM EMP 
    WHERE EMPNO = :emp_number; 
if(ind_comm == -1)    /* commission is null */
    pay = salary; 
else
    pay = salary + commission; 

関連項目:

標識変数

標識変数のガイドライン

標識変数の宣言および参照については、次のガイドラインに従ってください。標識変数は、次のようにする必要があります。

  • 2バイトの整数として(宣言部がある場合はそこに)明示的に宣言します。

  • SQL文中では前にコロン(:)を付けます。

  • SQL文中とPL/SQLブロック内では、そのホスト変数の直後に指定します(INDICATORキーワードを前に付ける場合は除きます)。

標識変数では、次のことをしないでください

  • ホスト言語文中で、前にコロン(:)を付けないでください。

  • ホスト言語文中で、そのホスト変数の直後に指定しないでください。

  • Oracleの予約語にしないでください。

Oracle制限事項

DBMS=V7またはV8の場合は、標識変数に対応付けられていないホスト変数にNULLをSELECTまたはFETCHすると、次のエラー・メッセージが発行されます。

ORA-01405: fetched column value is NULL

MODE=ORACLEおよびDBMS=V7またはV8を指定してプリコンパイルする場合は、UNSAFE_NULL=YESを指定してORA-01405メッセージを使用禁止にできます。

関連項目:

UNSAFE_NULL