ROW constructors

You use ROW constructors to generate values for ROW-type columns.

Suppose you create the following named ROW type and a table that contains the named ROW type row_t and an unnamed ROW type:
CREATE ROW TYPE row_t ( x INT, y INT);
CREATE TABLE new_tab 
(
col1 row_t, 
col2 ROW( a CHAR(2), b INT)
);
When you define a column as a named ROW type or unnamed ROW type, you must use a ROW constructor to generate values for the ROW-type column. To create a value for either a named ROW type or unnamed ROW type, you must complete the following steps:
  • Begin the expression with the ROW keyword.
  • Specify a value for each field of the ROW type.
  • Enclose the comma-separated list of field values within parentheses.

The format of the value for each field must be compatible with the data type of the ROW field to which it is assigned.

You can use any kind of expression as a value with a ROW constructor, including literals, functions, and variables. The following examples show the use of different types of expressions with ROW constructors to specify values:
ROW(5, 6.77, 'HMO')

ROW(col1.lname, 45000)

ROW('john davis', TODAY)

ROW(USER, SITENAME)
The following statement uses literal numbers and quoted strings with ROW constructors to insert values into col1 and col2 of the new_tab table:
INSERT INTO new_tab 
VALUES 
(
ROW(32, 65)::row_t,
ROW('CA', 34)
);
When you use a ROW constructor to generate values for a named ROW type, you must explicitly cast the ROW value to the appropriate named ROW type. The cast is necessary to generate a value of the named ROW type. To cast the ROW value as a named ROW type, you can use the cast operator ( :: ) or the CAST AS keywords, as the following examples show:
ROW(4,5)::row_t 
CAST (ROW(3,4) AS row_t)
You can use a ROW constructor to generate ROW type values in INSERT, UPDATE, and SELECT statements. In the next example, the WHERE clause of a SELECT statement specifies a ROW type value that is cast as type person_t:
SELECT * FROM person_tab 
   WHERE col1 = ROW('charlie','hunter')::person_t;

For more information on using ROW constructors in INSERT and UPDATE statements, see the INSERT and UPDATE statements in this document. For information on named ROW types, see the CREATE ROW TYPE statement. For information on unnamed ROW types, see the discussion of the ROW data type in the HCL OneDB™ Guide to SQL: Reference. For task-oriented information on named ROW types and unnamed ROW types, see the HCL OneDB Database Design and Implementation Guide.