17.10 - 例: UNNESTの呼び出し - Advanced SQL Engine - Teradata Database

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

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

この例は、UNNESTを呼び出し、1-D ARRAYタイプの列myarrayを使用して、オプションのキー値引数を渡し、オプションのWITH ORDINALITY句を使用します。例では、tt2テーブルの各行のmyarray配列に格納される値ごとに1行ずつ、20行を返します。3つの列の結果が返されます。

  • out_keyは、UNNESTに渡されるオプションのキー値です。この例ではtt2テーブルのint_key列の値に対応するため、tt2テーブルの各行から発生した結果の配列値を識別します。
  • posは、配列内の構成要素の位置です。例ではWITH ORDINALITY句を使用しているため、結果に含まれます。
  • valは、配列の構成要素の値です。
    CREATE TYPE myarray AS INTEGER ARRAY[10];
    CREATE TABLE tt2(
       pkey INTEGER,
       int_key INTEGER,
       vc_key VARCHAR(20),
       myarr myarray);
    INS INTO tt2 VALUES(0, 0, 'item 0', NEW myarray(10, 20, 30, 40, 50));
    INS INTO tt2 VALUES(1, 1, 'item 1', NEW myarray(11, 21, 31, 41, 51));
    INS INTO tt2 VALUES(2, 2, 'item 2', NEW myarray(12, 22, 32, 42, 52));
    INS INTO tt2 VALUES(3, 3, 'item 3', NEW myarray(NULL, 23, 33, 43, NULL));
    INS INTO tt2 VALUES(4, 4, 'item 4', NULL);
    SELECT out_key, tf.pos, tf.val
    FROM tt2,
         TABLE (UNNEST(tt2.int_key, tt2.myarr) WITH ORDINALITY) AS tf(out_key, val, pos) WHERE tt2.int_key = tf.out_key ORDER BY 1,2;
    *** Query completed. 20 rows found. 3 columns returned.
     *** Total elapsed time was 1 second.
        out_key          pos          val
    -----------  -----------  -----------
              0            1           10
              0            2           20
              0            3           30
              0            4           40
              0            5           50
              1            1           11
             1            2           21
              1            3           31
              1            4           41
              1            5           51
              2            1           12
              2            2           22
              2            3           32
              2            4           42
              2            5           52
              3            1            ?
              3            2           23
              3            3           33
              3            4           43
              3            5            ?