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