1次元および多次元のARRAY/VARRAY UDTの変換グループ機能は、Vantageによって自動的に生成されます。
- tosql変換入力パラメータ
- fromsql変換出力値
VARCHAR文字列内の変換された出力の形式は、次に示すようにカンマで区切られ括弧で囲まれた、配列の各構成要素の値についての文字列になります。これを、変換値文字列といいます。配列にn個の構成要素があるとすると、次のようになります。
(element_1, ..., element_n)
この文字列を、変換値文字列と呼びます。次の表は、配列に含まれる各構成要素の形式と、それに準じたSQLデータ型の一覧です。
データ型 | 形式 | サイズ(バイト) |
---|---|---|
CHARACTER(n) CHARACTER SET server_character_set | ‘string’ このstring自体は長さkの文字列であり、kの値は文字の長さになります。また、この文字列は、宣言されたサーバー文字セットにエンコードされます。 |
k + 2 |
VARCHAR(n) CHARACTER SET server_character_set | ||
|
配列のtosqlは、次の構文にする必要があります。
条件
配列の変換fromsqlは、次の形式になります。 --(I).9(F) 条件
NUMBER(n)とNUMBER(n,m)についてはm = 0のときに、次の形式になります。これは、小数点がないことを意味します。 --(I) |
≤n+2 |
BYTEINT | ±n 条件
|
≤ 4 |
SMALLINT | ±n 条件
|
≤ 6 |
INTEGER | ±n 条件
|
≤ 11 |
BIGINT | ±n 条件
|
≤ 20 |
|
配列の変換fromsqlは、次のいずれかの形式になります。
条件
REAL、FLOATおよびDOUBLE PRECISIONタイプの場合、変換fromsqlは次の形式になります。 -9.99999999999999E-999 NUMBER、NUMBER(*)およびNUMBER(*,m)タイプの場合、変換fromsqlは次の形式になります。 FN9 FN9形式は、次のように定義されています。
|
≤ 22 次のタイプの場合。
|
|
≤ 40 次のタイプの場合。
|
|
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) |
|
TIME(n) WITH TIME ZONE | HH:MI:SS.S(F)Z |
|
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)) |
|
PERIOD(TIME(n) WITH TIME ZONE) | (HH:MI:SS.S(F)Z, HH:MI:SS.S(F)Z) |
|
PERIOD(TIMESTAMP(n) | (YYYY-MM-DDBHH:MI:SS.S(F), YYYY-MM-DDBHH:MI:SS.S(F)) |
|
PERIOD(TIMESTAMP(n) WITH TIME ZONE) | (YYYY-MM-DDBHH:MI:SS.S(F)Z, YYYY-MM-DDBHH:MI:SS.S(F)Z) |
|
- 次に示すデータ構成要素の1次元または多次元のARRAY/VARRAYデータ型については、変換はサポートされません。これらの要素型を使用して、ARRAY/VARRAYデータ型を作成することはできません。
- BLOB
- CLOB
- 地理空間
- 要素型がCHARACTERまたはVARCHAR以外の基本データ型の場合や、CHARACTERまたはVARCHAR属性を持たないPERIODまたはUDTの場合、配列コンストラクタの変換値文字列の定義はVARCHAR(64000) CHARACTER SET LATINになります。
ARRAY/VARRAYタイプの作成時に変換値文字列のサイズが64Kを超えると、そのリクエストはアボートされ、SQL Engineはリクエスト側にエラーを返します。
- 要素型が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タイプの作成時に変換値文字列の最大サイズが定義した長さを超えると、そのリクエストはアボートされ、SQL Engineはリクエスト側にエラーを返します。
- 要素型がCHARACTERまたはVARCHARの場合や、CHARACTERまたはVARCHAR属性を持つUDTの場合に、配列の構成要素に多数の埋め込み単一引用符文字が含まれているときには、埋め込まれた単一引用符を区別するために追加の引用符を指定する必要があります。
これは、配列の列を選択するときに、出力できる変換文字列の合計サイズを制限することになります。SQL Engineは、埋め込まれた引用符文字を変換文字列のサイズに計上するためです。
配列構成要素に埋め込みの単一引用符文字が含まれているときに、ArrayTransformsOffフラグがNに設定されていると、SQL Engineはfromsql変換を使用してその文字を出力します。
最悪の場合(つまり、すべて単一引用符文字が埋め込まれている文字列)は、上記の理由から変換文字列の最大サイズが半分になります。これにより、ARRAY/VARRAYタイプに生成される変換文字列の合計サイズが行の最大サイズを超えると、そのARRAY/VARRAYタイプに対するリクエストはSQL Engineによってアボートされ、リクエスト側にはエラーが返されることになります。
- Vantageは、初期化されていない構成要素を表示しません。
- ある構成要素の値を初期化する場合は、それより前のすべての構成要素も値か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タイプのサイズ制限を超えると、そのリクエストはアボートされ、SQL Engineはリクエスト側にエラーを返します。
- SQL Engineは、カンマ文字の前後にある空白文字、改行文字またはタブ文字を無視します。また、最後の単一引用符文字の前や、最初の単一引用符の後ろにあるそれらの文字も無視します。