16.20 - 標識変数 - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQL ストアド プロシージャおよび埋め込みSQL

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1148-162K-JPN

必要に応じて、標識ホスト変数をメイン ホスト変数と関連付けることができます。標識変数の値は、クライアント サーバー間のデータ交換で、ホスト変数がNULLであるかどうかを受信エージェントに通知するために、送信エージェント(クライアント アプリケーションからTeradata Database、またはTeradata Databaseからクライアント アプリケーション)によって設定されます。

構文



構文要素 指定内容
host_variable_name indicator_variable_nameが関連するホスト変数の名前
INDICATOR indicator_variable_namehost_variable_nameと区別するのを助けるためのオプションのキーワード
indicator_variable_name 標識変数の名前

標識変数のルールと指針

  • すべての標識変数は、それに関連付けられているメイン ホスト変数にコロン文字が先行しているかどうかに関わりなく、コロン文字が先行していなければなりません。
  • 標識ホスト変数は、それが関連付けられているメイン ホスト変数の直後に指定します(例えば、:MainVar:IndVarまたは:HostMainVar:HostIndVar)。

    混乱を避けるためには、標識変数に語INDICATORを先行させます(つまり、:MainVar INDICATOR :IndVar)。

  • 標識変数は、WHERE句条件でも使用することができます。

標識変数をホスト変数とともに使用する方法

入力ホスト変数の場合、アプリケーション プログラムは標識変数を使用して、ホスト変数がNULLであるかどうかをTeradata Databaseに通知します。

出力ホスト変数の場合、Teradata Databaseは標識変数を使用して、ホスト変数がNULLであるかどうか、または値がホスト変数に送られたときに切り捨てられたかどうかをアプリケーション プログラムに通知します。

以下の表は、標識変数値と入力ホスト変数との間の関係を定義しています。

標識変数の値 関連付けられた入力ホスト変数についての報告
-n

nは通常は1

NULL。
0 非NULLで、正常に出力ホスト変数に戻された。
+n 切り捨てられている。

この標識変数に関連のあるメイン変数に文字またはバイト列が返されるとき、切り捨てが行なわれます。

nは、切り捨て前の元の列長を報告します。

標識変数の処理

Teradata Databaseは、標識変数を以下のように処理します。
  • 1つの標識変数が、応答行の各データ項目(フィールド)に対応する。
  • 各標識変数は、1ビットの領域を占める。
  • nのデータフィールドがある場合に、応答行の最初の(n + 7)/8バイトの中に、その行のデータに対する標識変数が含まれる。

    たとえば、応答行に19個のデータ項目が含まれる場合に、(19 + 7)/8 = 3バイトの中にその行に対する標識変数が含まれる。

  • 標識変数は、それらを格納するために必要な8ビット バイトの最小個数で保持されています。

    未使用のビットはバイナリのゼロに設定されます。

標識変数の内部処理

内部的にはTeradata DatabaseはCLIv2標識モードを使用して、クライアント システムの使用する内部形式でRecordパーセルのDataフィールドのNULLIndicatorsフィールドにデータを返します。

最初の応答行の直前に来るものは、返される列の合計、データ型、および各列の長さに関する情報を含むDataInfoパーセルです。

各応答行は、その行内のそれぞれのデータ項目に対応する標識変数で始まります。

標識変数およびDateTimeとIntervalデータ

DateTimeおよびIntervalの値はCharFixとしてキャストされ、標識変数の出力のために作成されるDataInfoパーセルは、INTEGERDATE (Teradata DatabaseスタイルのDATE)モードのDATE値の例外に関するルールに従います。

IndicDataモードで値をエクスポートして、続いてUSING句をインポート レコード内の適切なタイプのDateTimeまたはInterval値に組み込んで、Dataモードでインポートします。

エクスポートされた値がINSERTまたはUPDATE文のためのデータとして使われる場合、Teradata Databaseは、CharFixであり、かつターゲットのDateTimeまたはInterval型に対して正しい長さを持つUSING句の値を暗黙にキャストします。

<Teradata Vantage™ SQLデータ操作言語、B035-1146>の「USINGリクエスト修飾子」を参照してください。

例: 標識変数

この例では、標識変数の値が-1の場合、従業員番号または部署番号はNULLに設定されます。

標識変数が0の場合、従業員番号または部署番号は、ホスト変数に報告された値に設定されます。

EXEC SQL
 INSERT INTO EMPLOYEE
 VALUES (:EMPNO INDICATOR :EMPNO-INDIC,:DEPTNO INDICATOR
 :DEPTNO-INDIC)
END-EXEC.

例: Nullによる部署番号の定義

この例では、部署番号はNULLに設定されます。

MOVE -1 TO DEPTNO-INDIC.
EXEC SQL
 UPDATE EMPLOYEE
 SET DEPARTMENT_NUMBER = :DEPTNO
 INDICATOR :DEPTNO-INDIC
END-EXEC.