Last Updated on 3 Marzo 2020 by Roberto De Pedrini
Non ho l’abitudine di curiosare nel codice scritto dai colleghi, ma qualche volta mi tocca. Spesso noto un errore nell’uso di SQLCODE: è importante chiarire che il test “SQLCODE <> 0” è sbagliato. Rileggiamo un attimo quello che c’è scritto nel manuale “SQL reference”:
The database manager sets SQLCODE after each SQL statement (…) is executed. SQLCODE is set as follows:
- If SQLCODE = 0 and SQLWARN0 is blank, execution was successful.
- If SQLCODE = 100, no data was found. For example, a FETCH statement returned no data, because the cursor was positioned after the last row of the result table.
- If SQLCODE > 0 and not = 100, execution was successful with a warning.
- If SQLCODE = 0 and SQLWARN0 = ‘W’, execution was successful with a warning.
- If SQLCODE < 0, execution was not successful.
Dalle parti che ho evidenziato risulta chiaro che il test “SQLCODE <> 0” è sbagliato, perché solo un SQLCODE negativo segnala una esecuzione fallita, mentre un SQLCODE positivo segnala una esecuzione con successo. Quindi il controllo giusto (p.e. dopo una FETCH) è:
if sqlCode < 0; // Esecuzione fallita.
dump(a);
leave;
elseif sqlCode = 100; // No data.
leave;
else; // FETCH riuscita.
// Elaborazione della riga.
endif;