17.00 - 17.05 - DECIMAL / NUMERIC - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Published
2020年6月
Content Type
プログラミング リファレンス
Publication ID
B035-1147-170K-JPN
Language
日本語 (日本)

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