Quando si lavora con SQL incorporato in RPG, si finisce spesso con un cursore e un ciclo dow
per l'elaborazione di tutte le righe nel risultato. La condizione nel ciclo dipende in qualche modo da SQLCOD
e/o da SQLSTT
, alcune variabili globalmente disponibili in un programma SQLRPGLE?Qual è il modo corretto per verificare la condizione di SQL trovato in ILE RPG?
Ma qual è il modo corretto di verificare questi valori? Alcuni suggeriscono SQLCOD = 0
altri not (SQLCOD = +100 or SQLSTT = '02000')
. Uno fallisce su tutti gli avvertimenti, l'altro non fallisce su alcuni errori, quindi non sono contento.
per illustrare ciò che faccio con un certo codice:
Pmain B
D PI
Dmy_ds E DS extname(SOME_TABLE)
D qualified
/free
exec sql
DECLARE cur CURSOR FOR
SELECT *
FROM some_table;
exec sql
OPEN cur;
exec sql
FETCH cur
INTO :my_ds;
dow sql_found();
exec sql
FETCH cur
INTO :my_ds;
enddo;
exec sql
CLOSE cur;
/end-free
Pmain E
Psql_found B
D PI N
/free
// insert return statement here...
/end-free
Psql_found E
Sto cercando l'istruzione return corretto qui, che mi farà passare attraverso tutte le righe se si verifica alcun errore e mi permette di lasciare quando un errore si verifica. Punti bonus per un modo decente di controllare gli errori.
Nota secondaria ... è non completamente vero che "Qualsiasi altra cosa è un errore" per le classi SQLSTATE. Solo le classi riservate per DB2 (e definite come errori) sono necessariamente errori. Segnalare "K1001", ad esempio, sarebbe solo un errore se l'applicazione lo gestisse come un errore. – user2338816