この例では、ある従業員に付随する電話番号を記録するソース テーブルからデータを取り出し、電話番号を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 )