Warnings in SQLSTATE
- An ANSI or X/Open warning message has a subclass code in the range "000" to "006".
The CLASS_ORIGIN and SUBCLASS_ORIGIN exception fields of the diagnostics area have a value of "ISO 9075" to indicate ANSI or X/Open as the source of the warning.
- A warning message specific to HCL Informix® has
a subclass code in the range "I01" to "I11" (see Table 1).
The CLASS_ORIGIN and SUBCLASS_ORIGIN exception fields of the diagnostics area have a value of "IX000" to indicate an exception, which is specific to Informix, as the source of the warning.
- A user-defined warning message from a user-defined routine has
a subclass code of "U01".
The CLASS_ORIGIN and SUBCLASS_ORIGIN exception fields of the diagnostics area have a value of "U0001" to indicate a user-defined routine as the source of the warning.
Warning value | SQL statement | Warning condition |
---|---|---|
"01I01" | CONNECT CREATE DATABASE DATABASE SET CONNECTION |
Your application opened a database that uses transactions. |
"01I03" | CONNECT CREATE DATABASE DATABASE SET CONNECTION |
Your application opened an ANSI-compliant database. |
"01I04" | CONNECT CREATE DATABASE DATABASE SET CONNECTION |
Your application opened a database that the Informix manages. |
"01I05" | CONNECT CREATE DATABASE DATABASE SET CONNECTION |
Your application opened a database that is on a host database server that requires float-to-decimal conversion for FLOAT columns (or smallfloat-to-decimal conversions for SMALLFLOAT columns). |
"01I06" | All statements | The statement executed contains the Informix extension to SQL (only when the DBANSIWARN environment variable is set). |
"01I07" | PREPARE DESCRIBE |
A prepared UPDATE or DELETE statement has no WHERE clause. The operation affects all rows of the table. |
"01I09" | FETCH SELECT...INTO EXECUTE...INTO |
The number of items in the select list does not equal the number of host variables in the INTO clause. |
"01I10" | CONNECT CREATE DATABASE DATABASE SET CONNECTION |
The database server is currently running in secondary mode. The database server is a secondary server in a data-replication pair; therefore, the database server is available only for read operations. |
"01I11" | Other statements (when your application activates the DATASKIP feature) | A data fragment (a dbspace) was skipped during query processing. |
To check for a warning, your code only needs to verify the first two characters of SQLSTATE. However, to identify the particular warning, you need to examine the subclass code. You might also want to use the GET DIAGNOSTICS statement to obtain the warning message from the MESSAGE_TEXT field.
int trans_db, ansi_db, online_db = 0;
⋮
msg = "CONNECT stmt";
EXEC SQL connect to 'stores7';
if(!strncmp(SQLSTATE, "02", 2)) /* < 0 is an error */
err_chk(msg);
if (!strncmp(SQLSTATE, "01", 2))
{
if (!strncmp(SQLSTATE[2], "I01", 3))
trans_db = 1;
if (!strncmp(SQLSTATE[2], "I03", 3))
ansi_db = 1;
if (!strncmp(SQLSTATE[2], "I04", 3))
online_db = 1;
}
The preceding code fragment checks SQLSTATE with the system strncmp() function. The getdiag sample program (Guide to the getdiag.ec file) uses the sqlstate_err() function to check the success of an SQL statement by comparing the first two characters of SQLSTATE with the string "01". For more information about the values of SQLSTATE that the CONNECT, CREATE DATABASE, DATABASE, and SET CONNECTION statements set, see Determine features of the database server.