必要に応じて、標識ホスト変数をメイン ホスト変数と関連付けることができます。標識変数の値は、クライアント サーバー間のデータ交換で、ホスト変数がNULLであるかどうかを受信エージェントに通知するために、送信エージェント(クライアント アプリケーションからVantage、またはVantageからクライアント アプリケーション)によって設定されます。
構文
[:] host_variable_name [ INDICATOR ] :indicator_variable_name
構文要素
- host_variable_name
- indicator_variable_nameが関連するホスト変数の名前
- INDICATOR
- indicator_variable_nameをhost_variable_nameと区別するのを助けるためのオプションのキーワード
- indicator_variable_name
- 標識変数の名前。
標識変数のルールと指針
- すべての標識変数は、それに関連付けられているメイン ホスト変数にコロン文字が先行しているかどうかに関わりなく、コロン文字が先行していなければなりません。
- 標識ホスト変数は、それが関連付けられているメイン ホスト変数の直後に指定します(例えば、:MainVar:IndVarまたは:HostMainVar:HostIndVar)。
混乱を避けるためには、標識変数に語INDICATORを先行させます(つまり、:MainVar INDICATOR :IndVar)。
- 標識変数は、WHERE句条件でも使用することができます。
標識変数をホスト変数とともに使用する方法
入力ホスト変数の場合、アプリケーション プログラムは標識変数を使用して、ホスト変数がNULLであるかどうかをデータベースに通知します。
出力ホスト変数の場合、データベースは標識変数を使用して、ホスト変数がNULLであるかどうか、または値がホスト変数に送られたときに切り捨てられたかどうかをアプリケーション プログラムに通知します。
以下の表は、標識変数値と入力ホスト変数との間の関係を定義しています。
標識変数の値 | 関連付けられた入力ホスト変数についての報告 |
---|---|
-n nは通常は1 |
NULL。 |
0 | 非NULLで、正常に出力ホスト変数に戻された。 |
+n | 切り捨てられている。 この標識変数に関連のあるメイン変数に文字またはバイト列が返されるとき、切り捨てが行なわれます。 値nは、切り捨て前の元の列長を報告します。 |
標識変数の処理
- 1つの標識変数が、応答行の各データ項目(フィールド)に対応する。
- 各標識変数は、1ビットの領域を占める。
- nのデータフィールドがある場合に、応答行の最初の(n + 7)/8バイトの中に、その行のデータに対する標識変数が含まれる。
たとえば、応答行に19個のデータ項目が含まれる場合に、(19 + 7)/8 = 3バイトの中にその行に対する標識変数が含まれる。
- 標識変数は、それらを格納するために必要な8ビット バイトの最小個数で保持されています。
未使用のビットはバイナリのゼロに設定されます。
標識変数の内部処理
内部的にはデータベースはCLIv2標識モードを使用して、クライアント システムの使用する内部形式でRecordパーセルのDataフィールドのNULLIndicatorsフィールドにデータを返します。
最初の応答行の直前に来るものは、返される列の合計、データ型、および各列の長さに関する情報を含むDataInfoパーセルです。
各応答行は、その行内のそれぞれのデータ項目に対応する標識変数で始まります。
標識変数およびDateTimeとIntervalデータ
DateTimeおよびIntervalの値はCharFixとしてキャストされ、標識変数の出力のために作成されるDataInfoパーセルは、INTEGERDATE (TeradataスタイルのDATE)モードのDATE値の例外に関するルールに従います。
IndicDataモードで値をエクスポートして、続いてUSING句をインポート レコード内の適切なタイプのDateTimeまたはInterval値に組み込んで、Dataモードでインポートします。
エクスポートされた値がINSERTまたはUPDATE文のためのデータとして使われる場合、データベースは、CharFixであり、かつターゲットのDateTimeまたはInterval型に対して正しい長さを持つUSING句の値を暗黙にキャストします。
<Teradata Vantage™ - SQLデータ操作言語、B035-1146>のUSING要求修飾子に関する情報を参照してください。
例: 標識変数
この例では、標識変数の値が-1の場合、従業員番号または部署番号はNULLに設定されます。
標識変数が0の場合、従業員番号または部署番号は、ホスト変数に報告された値に設定されます。
例: Nullによる部署番号の定義
この例では、部署番号はNULLに設定されます。
MOVE -1 TO DEPTNO-INDIC. EXEC SQL UPDATE EMPLOYEE SET DEPARTMENT_NUMBER = :DEPTNO INDICATOR :DEPTNO-INDIC END-EXEC.EXEC SQL INSERT INTO EMPLOYEE VALUES (:EMPNO INDICATOR :EMPNO-INDIC,:DEPTNO INDICATOR :DEPTNO-INDIC) END-EXEC.