How many rows were affected?
When your program uses a cursor to select rows, it can
test SQLCODE for 100
(or SQLSTATE for 02000
),
the end-of-data return code. This code is set to indicate that no
rows, or no more rows, satisfy the query conditions. For databases
that are not ANSI compliant, the end-of-data return code is set in
SQLCODE or SQLSTATE only following SELECT statements; it is not used
following DELETE, INSERT, or UPDATE statements. For ANSI-compliant
databases, SQLCODE is also set to 100
for updates,
deletes, and inserts that affect zero rows.
A query that finds no data is not a success. However, an UPDATE or DELETE statement that happens to update or delete no rows is still considered a success. It updated or deleted the set of rows that its WHERE clause said it should; however, the set was empty.
In the same way, the INSERT statement does not set the end-of-data return code even when the source of the inserted rows is a SELECT statement, and the SELECT statement selected no rows. The INSERT statement is a success because it inserted as many rows as it was asked to (that is, zero).
To find out how many rows are inserted, updated, or deleted, a program can test the third element of SQLERRD. The count of rows is there, regardless of the value (zero or negative) in SQLCODE.