この例では、ある従業員に付随する電話番号を記録するソース テーブルからデータを取り出し、電話番号をARRAYタイプで記録する新しいテーブルに挿入します。多くの場合、一人の従業員が、会社の電話、携帯電話、自宅の電話など、複数の電話番号を持つことができます。こうしたタイプのデータを表わすには、複数の電話番号を記録する1-D ARRAYタイプの方が適しています。これはテーブルの行数を減らします。
なお、同じタイプの動作をn-D ARRAYタイプで表わすことも可能です。両者の唯一の相違は、構成要素の格納が行優先順で処理されることです。
次の文は、最大100件の電話番号値を持つことのできる1-D ARRAYタイプを作成します。
CREATE TYPE emp_phone_array AS VARCHAR(14) ARRAY[100];
次のソース テーブルは、従業員の電話番号それぞれが1行になっています。
CREATE SET TABLE employee
(emp_id INTEGER,
emp_name VARCHAR(30),
emp_phone CHAR(14));
SELECT * FROM employee;
emp_id emp_name emp_phone
-------- ----------- -------------
1 Beth (619) 619-6190
1 Beth (619) 620-6200
1 Beth (619) 720-7200
2 Greg (858) 858-8580
2 Greg (858) 859-8590
2 Greg (858) 860-8600
3 Louise (421) 421-4210
3 Louise (421) 422-4220
3 Louise (421) 423-4230
次のターゲット テーブルでは、従業員それぞれが1行になっており、その従業員に関連するすべての電話番号をARRAYタイプに格納します。
CREATE SET TABLE employeePhoneInfo (emp_id INTEGER, emp_name VARCHAR(30), emp_phone emp_phone_array); INSERT INTO employeePhoneInfo SELECT emp_id, emp_name, ARRAY_AGG(emp_phone, NEW emp_phone_array()) FROM employee GROUP BY emp_id,emp_name WHERE emp_id < 100; SELECT * FROM employeePhoneInfo;
結果は以下のようになります。
emp_id emp_name emp_phone
-------- ----------- -------------
1 Beth ( (619) 619-6190, (619) 620-6200, (619) 720-7200 )
2 Greg ( (858) 858-8580, (858) 859-8590, (858) 860-8600 )
3 Louise ( (421) 421-4210, (421) 422-4220, (421) 423-4230 )