Cデータ型定義
typedef signed char DECIMAL1; typedef short DECIMAL2; typedef int DECIMAL4; typedef signed char NUMERIC1; typedef short NUMERIC2; typedef int NUMERIC4; typedef struct { unsigned int low; int high; } DECIMAL8, NUMERIC8; typedef struct { unsigned int int1; unsigned int int2; unsigned int int3; int int4; } DECIMAL16, NUMERIC16;
使用方法
使用するC型は、SQL型のサイズによって決まります。
DECIMAL(n,m)またはNUMERIC(n,m)のサイズ | 使用するC型 |
---|---|
1 ≤ n ≤ 2 | DECIMAL1またはNUMERIC1 |
3 ≤ n ≤ 4 | DECIMAL2またはNUMERIC2 |
5 ≤ n ≤ 9 | DECIMAL4またはNUMERIC4 |
10 ≤ n ≤ 18 | DECIMAL8またはNUMERIC8 |
18 < n | DECIMAL16またはNUMERIC16 |
SQL型のサイズは、DECIMAL入力引数または戻り引数の値の範囲も決定します。例えば、CREATE FUNCTION文でDECIMAL(1,0)入力引数を定義する場合、この引数の値の範囲は-9~9です。値の有効範囲外の値は、数値オーバーフロー エラーを生成します。DECIMAL型の詳細については、<Teradata Vantage™ - データ タイプおよびリテラル、B035-1143>を参照してください。
可変長としてDECIMAL型を使用する場合は、最善の方法として、Cのコードで処理可能な最大値を処理できるDECIMALを指定してください。
次の例では、UDF定義とC関数宣言でDECIMALを使用しています。
SQL関数定義 | 対応するC関数宣言 |
---|---|
CREATE FUNCTION F1 ( A DECIMAL(5,0) ) RETURNS DECIMAL(5,0) ...; |
void f1( DECIMAL4 *a, DECIMAL4 *result, ... ) { ... } |