16.20 - 例: ソース テーブルのデータを新しいテーブルに挿入する - Teradata Vantage NewSQL Engine

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

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

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