ホスト変数はすべて、オプションのインジケータ変数に関連付けることができます。標識変数は、2バイトの整数として定義する必要があります。また、SQL文中では、標識変数の前にコロンを付けてホスト変数の直後に指定する必要があります(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の予約語にしないでください。