NullBitVectorの検査と設定 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL外部ルーチン プログラミング

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/qwr1571437338192.ditamap
dita:ditavalPath
ja-JP/qwr1571437338192.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

NullBitVectorを使用すると、ARRAY内に存在するNULLではない構成要素、または存在しているがNULLに設定されている構成要素を特定できます。

NullBitVectorとは、ARRAY内で初期化された各構成要素のプレゼンス ビットを格納するためのバイトの配列です。各バイトには、8ビットのプレゼンス ビットが格納されます。このビットは、ロー優先順で格納され、0から番号付けが始まります。ビット値が1の場合は、それに対応するARRAYの構成要素に非NULL値が格納されていることになります。ビット値が0の場合、ARRAYの構成要素は存在しますがNULLに設定されていることになります。

NullBitVectorへのアクセスに使用するデータ型は、sqltypes_td.hで次のように定義されています。

typedef unsigned char NullBitVecType;

次に示すTeradataのライブラリ関数を使用すると、NullBitVectorのビットを検査および設定できます。

ライブラリ関数 説明
FNC_CheckNullBitVector NullBitVector内の1つのビットの値を検査します。
FNC_CheckNullBitVectorByElemIndex NullBitVector内の1つのビットの値を検査しますが、検査対象のビットは次元で指定するようにARRAY型構成要素のインデックスで参照します。
FNC_SetNullBitVector NullBitVector内の1つのビット、またはすべてのビットを指定の値で設定します。
FNC_SetNullBitVectorByElemIndex NullBitVector内の1つのビットを設定しますが、設定対象のビットは次元で指定するようにARRAY型構成要素のインデックスで参照します。

次に、NullBitVectorの一般的な使用方法を示します。

  1. FNC_GetArrayTypeInfoを呼び出して、ARRAY引数に含まれる構成要素の数を特定します。その代わりに、FNC_GetArrayElementCountを呼び出して、現時点でARRAY引数に存在する構成要素の総数を特定することもできます。
  2. 新しいNullBitVector配列を当てます。
    NullBitVector = (NullBitVecType*)FNC_malloc(nullVecBufSize);

    nullVecBufSizeは、ARRAY内の構成要素の数に応じて決定します。

  3. NullBitVectorのすべてのビットを0 (存在しない)に設定することで初期化します。
    memset(NullBitVector, 0, nullVecBufSize);
  4. FNC_GetArrayElementsを呼び出して、1つまたは複数のARRAY構成要素の値を取得してから、関数にNullBitVectorを渡します。FNC_GetArrayElementsは、要求された構成要素のどれが存在していてNULLではないか、またどれが存在しているがNULLに設定されているかを示すように、NullBitVectorを変更します。
  5. 変更されたNullBitVectorを指定して、FNC_CheckNullBitVectorまたはFNC_CheckNullBitVectorByElemIndexを呼び出すことで、FNC_GetArrayElementsから返された結果を解釈します。
  6. FNC_freeを呼び出して、データの処理後に割り当て済みのリソースを解放します。

これらの関数の詳細について、Cライブラリ関数を参照してください。