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,
... )
{ ... }
|