Data manipulation statements

Make sure that SQL statement syntaxes are supported by all target database engines.

Several SQL syntaxes for the INSERT, UPDATE and DELETE statements are supported by the compiler. Some of the syntaxes are IBM® Informix® specific, but will be converted to standard SQL at compile time.

The following statements are standard SQL and work with all database servers:
(1) INSERT INTO table (column-list) VALUES (value-list)
(2) UPDATE table SET column = value, ... [WHERE condition]
(3) DELETE FROM table [WHERE condition]
The next statements are not standard SQL, but are converted by the compiler to standard SQL, working with all database servers:
(4) INSERT INTO table VALUES record.*
    -- where record is defined LIKE a table from db schema   
(5) UPDATE table SET (column-list) = (value-list) [WHERE condition]
(6) UPDATE table SET {[table.]*|(column-list)} = record.* ... [WHERE condition]
   -- where record is defined LIKE a table from db schema
(7) UPDATE table SET [table.]* = (value-list) [WHERE condition]

For maximum SQL portability, INSERT statements should be reviewed to ensure the SERIAL column is excluded from the value list.

Note: You can easily search for non-portable SQL statements in your sources by compiling with the -W stdsql fglcomp option.
For example, the following statement:
INSERT INTO tab (col1, col2, ...) VALUES ( 0, p_value2, ... )
should be converted to:
INSERT INTO tab (col2, ...) VALUES ( p_value2, ... )
A static SQL INSERT statement using records defined from the schema file should also be reviewed:
DEFINE rec LIKE tab.*
INSERT INTO tab VALUES ( rec.* )   -- will use the serial column
should be converted to:
INSERT INTO tab VALUES rec.* -- without parentheses, serial column is removed
Note: Using the record.* notation in static INSERT and UPDATE syntax may not be compatible with database-specific features, where some automatically-assigned columns must not be set or modified by the statement. For example, with Microsoft SQL Server temporal tables, timestamp columns are automatically assigned and must not be changed by INSERT or UPDATE statements. In such case, it is mandatory to explicitly list all modifiable columns and corresponding program variables.