16.20 - ARRAY/VARRAY UDTの入力/出力文字列の変換 - Teradata Vantage NewSQL Engine

Teradata Vantage™ データ タイプおよびリテラル

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1143-162K-JPN

1次元および多次元のARRAY/VARRAY UDTの変換グループ機能は、Teradata Databaseによって自動的に生成されます。

Teradata Databaseでは、1次元と多次元のどちらのARRAY/VARRAY UDTについても、次の項目に同じ文字列形式を使用します。
  • tosql変換入力パラメータ
  • fromsql変換出力値

VARCHAR文字列内の変換された出力の形式は、次に示すようにカンマで区切られ括弧で囲まれた、配列の各構成要素の値についての文字列になります。これを、変換値文字列といいます。配列にn個の構成要素があるとすると、次のようになります。

(<element1>,<element2>, … <elementn>)

説明

構文の要素 指定内容
<element1> 配列の1番目の構成要素。
<element2> 配列の2番目の構成要素。
<elementn> 配列のn番目の構成要素。

この文字列を、変換値文字列と呼びます。次の表は、配列に含まれる各構成要素の形式と、それに準じたSQLデータ型の一覧です。

データ型 形式 サイズ(バイト)
CHARACTER(n) CHARACTER SET server_character_set string

このstring自体は長さkの文字列であり、kの値は文字の長さになります。また、この文字列は、宣言されたサーバー文字セットにエンコードされます。

k + 2
VARCHAR(n) CHARACTER SET server_character_set
  • NUMERIC(n,m)
  • DECIMAL(n,m)
  • NUMBER(n) (厳密な型)

    このタイプの場合、m = 0。

配列のtosqlは、次の構文にする必要があります。
  • ±n
  • ±.n
  • ±n.n
条件
  • ±は任意指定の記号です。

    デフォルト値は+です。

  • nは任意の有効な整数です。

配列の変換fromsqlは、次の形式になります。

--(I).9(F)
条件
  • I = n-m
  • F = m

NUMBER(n)とNUMBER(n,m)についてはm = 0のときに、次の形式になります。これは、小数点がないことを意味します。

--(I)
n+2
BYTEINT ±n
条件
  • ±は任意指定の記号です。

    デフォルト値は+です。

  • nは、-128から127の間の、任意の有効な整数です。
4
SMALLINT ±n
条件
  • ±は任意指定の記号です。

    デフォルト値は+です。

  • nは、-32768から32767の間の、任意の有効な整数です。
6
INTEGER ±n
条件
  • ±は任意指定の記号です。

    デフォルト値は+です。

  • nは、

    -2147483648から2147483647

    の間の、任意の有効な整数です。
11
BIGINT ±n
条件
  • ±は任意指定の記号です。

    デフォルト値は+です。

  • nは、

    -9,223,372,036,854,775,808から9223372036854775807

    の間の、任意の有効な整数です。
20
  • REAL
  • FLOAT
  • DOUBLE PRECISION
配列の変換fromsqlは、次のいずれかの形式になります。
  • ± nm
  • ± n.E±m
  • ± .nm
  • ± n.nm
条件
  • ±は任意指定の記号です。

    デフォルト値は+です。

  • nは、仮数の整数部と小数部(任意選択)を表わす任意の有効な整数値。

    FLOAT、REALおよびDOUBLE PRECISIONタイプの場合、桁数が15桁を超えることはできません。ただし、この桁数には、仮数の整数部に含まれる先行のゼロは含まれません

    NUMBER、NUMBER(*)およびNUMBER(*, m)タイプの場合、桁数が40桁を超えることはできません。ただし、この桁数には、仮数の整数部に含まれる先行のゼロは含まれません

  • Eは、後続のmの数字が数値の指数であることを示すための記号。
  • mは、数値の指数を表わす任意の有効な整数。

    先行のゼロを含め、mに含まれる桁数が3桁を超えることはできません。

REAL、FLOATおよびDOUBLE PRECISIONタイプの場合、変換fromsqlは次の形式になります。

-9.99999999999999E-999

NUMBER、NUMBER(*)およびNUMBER(*,m)タイプの場合、変換fromsqlは次の形式になります。

FN9
FN9形式は、次のように定義されています。
  • データが64文字以内に収まる場合は、先行のゼロが破棄され、文字形式でデータが表示されます。
  • データが64文字以内に収まらない場合は、データの表示に指数表記法が使用されます。

    指数表記法の形式はFNEになります。

22

次のタイプの場合。

  • REAL
  • FLOAT
  • DOUBLE PRECISION
  • NUMBER
  • NUMBER(*)
  • NUMBER(*, m)
≤ 40

次のタイプの場合。

  • NUMBER
  • NUMBER(*)
  • NUMBER(*, m)
BYTE(n) X(2n)

これは、長さが2nの16進数数文字列です。

2n
VARBYTE (n) X(2k)

これは、長さが2kの16進数数文字列です。kは、文字列のバイト数になります。

2k
DATE
YYYY-MM-DD
10
TIME(n)
HH:MI:SS.S(F)
  • n = 0の場合、サイズ = 8
  • n>0の場合、サイズ = 9+n
TIME(n) WITH TIME ZONE
HH:MI:SS.S(F)Z
  • n = 0の場合、サイズ = 14
  • n>0の場合、サイズ = 15+n
TIMESTAMP(n)
YYYY-MM-DDBHH:MI:SS.S(F)
n = 0の場合、サイズ = 19
n>0の場合、サイズ = 20+n
TIMESTAMP(n) WITH TIME ZONE
YYYY-MM-DDBHH:MI:SS.S(F)Z
n = 0の場合、サイズ = 25
n>0の場合、サイズ = 26+n
INTERVAL SECOND(n, m) 小数精度が定義されていない場合は、-s(n) 小数精度が定義されていない場合は、

サイズ = n + 1

小数精度がmとして定義されている場合は、-s(n).s(m) 小数精度が定義されている場合は、サイズ = n + m + 2
INTERVAL MINUTE(n)
-m(n)
n + 1
INTERVAL MINUTE(n) TO SECOND(m) 小数精度が定義されていない場合は、-m(n):ss 小数精度が定義されていない場合は、

サイズ = n + 4

小数の精度がmとして定義されている場合は、-m(n):ss.s(m) 小数精度がmとして定義されている場合は、サイズ = n + m + 5
INTERVAL HOUR(n)
-h(n)
n + 1
INTERVAL HOUR(n) TO MINUTE
-h(n):mm
n + 4
INTERVAL HOUR(n) TO SECOND(m) 小数精度が定義されていない場合は、-h(n):mm:ss 小数精度が定義されていない場合は、

サイズ = n + 7

小数の精度がmとして定義されている場合は、-h(n) :mm:ss.s(m) 小数の精度がmとして定義されている場合は、サイズ = n + m + 8
INTERVAL DAY(n)
-d(n)
n + 1
INTERVAL DAY(n) TO SECOND(m) 小数精度が定義されていない場合は、-d(n) hh:mm:ss 小数精度が定義されていない場合は、サイズ = n + 10
小数の精度がmとして定義されている場合は、-d(n) hh:mm:ss.s(m) 小数の精度がmとして定義されている場合は、

サイズ = n+m+11

INTERVAL DAY(n) TO MINUTE
-d(n) hh:mm
n + 7
INTERVAL DAY(n) TO HOUR
-d(n) hh
n + 4
INTERVAL MONTH(n)
-m(n)
n + 1
INTERVAL YEAR(n)
-y(n)
n + 1
INTERVAL YEAR(n) TO MONTH
-y(n)-mm
n + 4
UDT (DISTINCT形式) 基になる事前定義データ型と同じ。  
UDT (STRUCTURED形式) STRUCTURED型UDTにk個の属性があると仮定します。この場合の形式は、次のようになります。
(attribute1, attribute2, …, attributek)

各属性は定義された順にカンマ文字で区切り、括弧で囲みます。

配列構成要素がネストされたSTRUCTURED型UDTの場合、行順に深さ優先で属性が返されます。ネストされた属性は、括弧文字で囲む必要があります。

例えば、attribute2が2つの属性attribute2_1とattribute2_2を持つUDTだと仮定します。この場合の形式は、次のようになります。

(attribute1,(attribute2_1, attribute2_2), … , attributek)
 
PERIOD(DATE)
(YYYY-MM-DD, YYYY-MM-DD)
24
PERIOD(TIME(n))
(HH:MI:SS.S(F), HH:MI:SS.S(F))
  • n = 0の場合、サイズ= 20
  • n>0の場合、サイズ=2n+22
PERIOD(TIME(n) WITH TIME ZONE)
(HH:MI:SS.S(F)Z, HH:MI:SS.S(F)Z)
  • n = 0の場合、サイズ= 32
  • n>0の場合、サイズ=2n+34
PERIOD(TIMESTAMP(n)
(YYYY-MM-DDBHH:MI:SS.S(F), YYYY-MM-DDBHH:MI:SS.S(F))
  • n = 0の場合、サイズ= 42
  • n>0の場合、サイズ=2n+44
PERIOD(TIMESTAMP(n) WITH TIME ZONE)
(YYYY-MM-DDBHH:MI:SS.S(F)Z, YYYY-MM-DDBHH:MI:SS.S(F)Z)
  • n = 0の場合、サイズ= 54
  • n>0の場合、サイズ=2n+56
上記の表の情報について、次の点に注意してください。
  • 次に示すデータ構成要素の1次元または多次元のARRAY/VARRAYデータ型については、変換はサポートされません。これらの要素型を使用して、ARRAY/VARRAYデータ型を作成することはできません。
    • BLOB
    • CLOB
    • 地理空間
  • 要素型がCHARACTERまたはVARCHAR以外の基本データ型の場合や、CHARACTERまたはVARCHAR属性を持たないPERIODまたはUDTの場合、配列コンストラクタの変換値文字列の定義はVARCHAR(64000) CHARACTER SET LATINになります。

    ARRAY/VARRAYタイプの作成時に変換値文字列のサイズが64Kを超えると、そのリクエストはアボートされ、Teradata Databaseはリクエスト側にエラーを返します。

  • 要素型がCHARACTERまたはVARCHAR CHARACTER SET LATINの場合や、サーバー文字セットがTeradata LatinのみのCHARACTERまたはVARCHAR属性を持つUDTの場合、配列の変換値文字列の定義はVARCHAR(64000) CHARACTER SET LATINになります。

    要素型がTeradata LATIN以外のサーバー文字セットのCHARACTERまたはVARCHARの場合や、Teradata LATIN以外のCHARACTERまたはVARCHAR属性を持つUDTの場合、配列の変換値文字列の定義はVARCHAR(32000) CHARACTER SET UNICODEになります。

    ARRAY/VARRAYタイプの作成時に変換値文字列の最大サイズが定義した長さを超えると、そのリクエストはアボートされ、Teradata Databaseはリクエスト側にエラーを返します。

  • 要素型がCHARACTERまたはVARCHARの場合や、CHARACTERまたはVARCHAR属性を持つUDTの場合に、配列の構成要素に多数の埋め込み単一引用符文字が含まれているときには、埋め込まれた単一引用符を区別するために追加の引用符を指定する必要があります。

    これは、配列の列を選択するときに、出力できる変換文字列の合計サイズを制限することになります。Teradata Databaseは、埋め込まれた引用符文字を変換文字列のサイズに計上するためです。

    配列構成要素に埋め込みの単一引用符文字が含まれているときに、ArrayTransformsOffフラグがNに設定されていると、Teradata Databaseはfromsql変換を使用してその文字を出力します。

    最悪の場合(つまり、すべて単一引用符文字が埋め込まれている文字列)は、上記の理由から変換文字列の最大サイズが半分になります。これにより、ARRAY/VARRAYタイプに生成される変換文字列の合計サイズが行の最大サイズを超えると、そのARRAY/VARRAYタイプに対するリクエストはTeradata Databaseによってアボートされ、リクエスト側にはエラーが返されることになります。

  • Teradata Databaseは、初期化されていない構成要素を表示しません。
  • ある構成要素の値を初期化する場合は、それより前のすべての構成要素も値かNULLのどちらかで初期化しておく必要があります。
  • ヌルの構成要素を示すには、nullリテラル('NULL'、'Null'、'null'など)を使用する必要があります。大文字と小文字は区別されません。

    定義されたサーバー文字セットがTeradata LATIN以外の場合、定義されたサーバー文字セットでのNULLリテラルに相当するエンコーディングでヌル構成要素を示します。これは、STRUCTURED型UDTのヌルや、ヌル属性を持つSTRUCTURED型UDTについても当てはまります。

  • オーバーフローの回避:

    配列の変換値文字列のサイズは、VARCHARのサイズ制限(Teradata LATINサーバー文字セットの場合は64K)内に収める必要があります。この制限は、サーバー文字セットがTeradata LATIN以外の場合には異なります。Teradata LATIN以外のサーバー文字セットのVARCHARに固有のサイズ制限についての詳細は、VARCHARデータ型を参照してください。

    ARRAY/VARRAYタイプの作成時に、配列の変換値文字列のサイズがVARCHARタイプのサイズ制限を超えると、そのリクエストはアボートされ、Teradata Databaseはリクエスト側にエラーを返します。

  • Teradata Databaseは、カンマ文字の前後にある空白文字、改行文字またはタブ文字を無視します。また、最後の単一引用符文字の前や、最初の単一引用符の後ろにあるそれらの文字も無視します。