16.20 - 例: UNNESTの呼び出し - Teradata Vantage NewSQL Engine

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

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

この例は、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            ?