Example: Inserting Data from a Source Table Into a New Table - Teradata Vantage - Analytics Database

SQL Data Types and Literals

Deployment
VantageCloud
VantageCore
Edition
VMware
Enterprise
IntelliFlex
Product
Analytics Database
Teradata Vantage
Release Number
17.20
Publication Date
June 2022
Content Type
Data Types
SQL Reference
Publication ID
B035-1143-172K
ft:locale
en-US
ft:lastEdition
2025-11-06
dita:mapPath
uds1628112204571.ditamap
dita:ditavalPath
qkf1628213546010.ditaval
ft:sourceId
dita
dita:id
exs1472253032394
lifecycle
latest
Product Category
Teradata Vantageā„¢

This example takes data from a source table which records a phone number associated with an employee and inserts it into a new table which records phone numbers in an ARRAY type. In many cases, an employee may have multiple phone numbers, such as office phone, mobile phone, home phone, etc. A better way to represent this type of data is with a 1-D ARRAY type which records multiple phone numbers. This reduces the number of rows in the table.

Note that the same type of behavior can be illustrated with an n-D ARRAY type. The only difference is that the storage of elements is done in row-major order.

The following statement creates a 1-D ARRAY type that can hold up to 100 phone number values:

CREATE TYPE emp_phone_array AS VARCHAR(14) ARRAY[100];

The following source table contains one row per employee phone number.

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

The following target table contains one row per employee and stores all phone numbers associated with an employee in an ARRAY type.

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;

The result is:

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 )