17.10 - 1次元ARRAYおよびVARRAYデータ型に関するルールと制限 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1184-171K-JPN
Language
日本語 (日本)

1次元ARRAY/VARRAY型は、値の可変長リスト(順序付き)として定義されています。それに入れられる値の最大数は、型作成時に指定します。数値インデックス値を使用して1次元ARRAY/VARRAY型の各要素値にアクセスできます。詳細については、<Teradata Vantage™ - データ タイプおよびリテラル、B035-1143>を参照してください。

データベースは、以下の例外を除き、UDTおよびPERIOD型を含む、ARRAY/VARRAYデータ型の要素タイプのすべてのTeradataデータ型をサポートします。
  • BLOB
  • CLOB
  • LOB UDT(DISTINCT型とSTRUCTURED型の両方)
  • 地理空間

ARRAY/VARRAY型の要素タイプには、1次元ARRAY/VARRAY型を指定できないことに注意してください。

以下のパラメータ データ型は、1次元ARRAY/VARRAY型の要素タイプとしてサポートされていません。
  • VARIANT_TYPE
  • TD_ANYTYPE

1次元ARRAY/VARRAY型は、テーブル列あるいはUDF、メソッド、外部ストアド プロシージャ、またはSQLストアド プロシージャへのパラメータに指定できます。1次元ARRAY/VARRAY型を使用して、SQLストアド プロシージャ内部のローカル変数を宣言することもできます。データベースは、ANSIスタイルのDML構文をサポートしているため、1次元ARRAY/VARRAY値の個々の要素にアクセスして操作できます。

以下のルールと制限は、1次元ARRAYおよびVARRAYデータ型の作成および使用に適用されます。
  • データベースのUDFライブラリに、名前にマルチバイト文字が存在するオブジェクトが含まれている場合、新規オブジェクト名に1バイト文字のみが含まれる場合でも、1バイト セッション文字セットを使用して、新たなUDF、UDT、メソッド、あるいはJava外部プロシージャ オブジェクトを作成することはできません。そうしないと、システムはリクエスト側にエラーを返します。
必ずマルチバイト セッション文字セットを使用するようにしてください。
  • VARRAYのOracle互換のCREATE TYPE構文は、REPLACE TYPE文をサポートしていません。

    VARRAY構文も、null制約を受けていない要素を指定するための、オプションのNOT NULL句をサポートしていません。

  • STRUCTURED型UDTおよびDISTINCT型UDTと同様に、データベースはデフォルトで、SYSUDTLIBデータベースで作成されるすべての1次元ARRAY/VARRAY型を、自動生成されたコンストラクタUDFと一緒に保管します。つまり、1次元ARRAYまたはVARRAY UDTを作成するには、SYSUDTLIBに対するUDTTYPE権限またはUDTMETHOD権限が必要です。
  • オプションのDEFAULT NULL句を使用して、型の作成時に、1次元ARRAY/VARRAY型のすべての要素をnullに初期化することができます。

    この句は特に、1次元ARRAY/VARRAY型で完全にデータが挿入されることが予想される場合に役立ちます。

    これを実行すると、1次元ARRAYの平均、更新、またはカウントなどのすべてのサブセット操作は、アボートおよびエラーを返すことができなくなります。それは、これらの操作が初期化されていない要素を参照するためです。

  • 1次元ARRAY/VARRAY型は、下限1のみをサポートします。これは、作成される1次元ARRAY/VARRAY型のすべての最初の配列要素が番号1でインデックス付けされることを意味します。このルールにより、CREATE TYPE 1次元ARRAY/VARRAY構文は、配列においてそれに相当する構文と互換性があり、さらに、ARRAY型構造に関するANSI SQL:2011標準に準拠したものとなっています。

    これは、オプションでユーザー指定の下限をサポートする多次元ARRAY/VARRAY型とは異なることに注意してください。1次元ARRAY/VARRAY型のCREATE TYPE構文は、このルールに則したものとなっており、オプションの明示的な下限および上限ではなく、サイズ値のみサポートされます。

  • 1次元ARRAY/VARRAY型の最大サイズ、およびその自動生成されたデータ変換文字列は64KB以下でなければなりません。これは、データベースがそのデータを行内に格納し、その自動生成されたデータ変換文字列の最大サイズが、VARCHAR型の最大サイズである64,000 Teradata Latinバイトに制限されるためです。

    1次元ARRAY/VARRAY型として定義できるテーブル列の数に関する制限はありませんが、テーブルには通常、1次元ARRAY/VARRAY型で指定された複数の列が含まれないことが期待されています。さらに、NoPIテーブルとして定義されていない限り、テーブルには他の列が含まれ、一部の列にはより小さいデータ型が含まれる場合があります。

    さらに、各行の行ヘッダーは追加のバイト セットを消費するため、1次元ARRAY/VARRAYデータ型の最大サイズが最大行サイズの約70%を超える可能性は低くなります。1次元ARRAY/VARRAY型の作成者に最大限の自由度を提供するため、データベースが適用する唯一のサイズ制限は行サイズ制限です。

    例えば、整数型1次元ARRAYであるAのカーディナリティがnの場合、A[n]は(16,384 - x)要素(1≤n ≤ (16,384 - x))以下でなければなりません(xは、配列の個々の要素への直接アクセスや、ARRAY用の自動生成データ変換文字列を表示するためのオーバーヘッドを可能にするために、ARRAY型の行内ストレージに必要な余分のバイト数)。

  • 1次元ARRAY/VARRAYのCREATE TYPEリクエストの際に、データ ディクショナリに対して以下のアクションが実行されます。CREATE TYPEリクエストで通常実行されるディクショナリ更新に加えて、リストされている以下のアクションがあります。
    • CREATE TYPEリクエストのDBC.UDTInfoにすでに挿入されている行は、列DBC.UDTInfo.ArrayNumDimensionsDBC.UDTInfo.ArrayScopeにも値を取り入れます。

      1次元ARRAY型用にこの行に挿入される値の詳細については、<Teradata Vantage™ - データ ディクショナリ、B035-1092>を参照してください。

    • 1次元ARRAY型に指定された要素タイプに関する情報を記録するために、DBC.TVFieldsに1行が挿入されます。要素タイプのフィールド名は、フィールドIDが1025の、事前定義された値_ARRAYELEMENTとして記録されます。1次元ARRAY型に指定された要素タイプがUDTである場合、UDT要素タイプとそのTypeIDの名前も記録されます。

      1次元ARRAY型用にこの行に挿入される値の詳細については、<Teradata Vantage™ - データ ディクショナリ、B035-1092>を参照してください。