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の一般的な使用方法を示します。
- FNC_GetArrayTypeInfoを呼び出して、ARRAY引数に含まれる構成要素の数を特定します。その代わりに、FNC_GetArrayElementCountを呼び出して、現時点でARRAY引数に存在する構成要素の総数を特定することもできます。
- 新しいNullBitVector配列を当てます。
NullBitVector = (NullBitVecType*)FNC_malloc(nullVecBufSize);
nullVecBufSizeは、ARRAY内の構成要素の数に応じて決定します。
- NullBitVectorのすべてのビットを0 (存在しない)に設定することで初期化します。
memset(NullBitVector, 0, nullVecBufSize);
- FNC_GetArrayElementsを呼び出して、1つまたは複数のARRAY構成要素の値を取得してから、関数にNullBitVectorを渡します。FNC_GetArrayElementsは、要求された構成要素のどれが存在していてNULLではないか、またどれが存在しているがNULLに設定されているかを示すように、NullBitVectorを変更します。
- 変更されたNullBitVectorを指定して、FNC_CheckNullBitVectorまたはFNC_CheckNullBitVectorByElemIndexを呼び出すことで、FNC_GetArrayElementsから返された結果を解釈します。
- FNC_freeを呼び出して、データの処理後に割り当て済みのリソースを解放します。
これらの関数の詳細について、Cライブラリ関数を参照してください。