Named row types

A named row type associates a name with the row structure. For a database, you create a named row type with the CREATE ROW TYPE statement.

If the database contains more than one row type with the same structure but with distinctly different names, the database server cannot properly enforce structural equivalence when it compares named row types. To resolve this ambiguity, specify a row-type name in the declaration of the row variable.

A named row variable can be typed or untyped.

The preprocessor does not check the validity of a row-type name and does not use this name at run time. just sends this name to the database server to provide information for type resolution. Therefore, treats the a_row variable in the following declaration as an untyped row variable even though a row-type name is specified:
EXEC SQL BEGIN DECLARE SECTION;
   row 'address_t' a_row;
EXEC SQL END DECLARE SECTION;
If you specify both the row-type name and a row structure in the declaration (a typed named row variable), the row-type name overrides the structure. For example, suppose the database contains the following definition of the address_t named row type:
CREATE ROW TYPE address_t 
(
   line1       char(20),
   line2       char(20),
   city        char(20),
   state       char(2),
   zipcode     integer
);
In the following declaration, the another_row host variable has line1 and line2 fields of type CHAR(20) (from the address_t row type:), not CHAR(10) as the declaration specifies
EXEC SQL BEGIN DECLARE SECTION;
   row 'address_t' (line1 char(10), line2 char(10), 
      city char(20), state char(2), zipcode integer) another_row;
EXEC SQL END DECLARE SECTION;