久しぶりにAS400のSQLRPGLEネタです。
SQLのINSERT文、UPDATE文、DELETE文実行後に、どうやって結果レコード数を取得するのか? という疑問が湧きました。
Javaであれば、下記のようにSQL実行結果の戻り値で結果レコード件数を取得できるのですが・・・。
int updatedCount = stmt.executeUpdate(sql);
SQLCA(SQL Communications area)
SQLRPGLEでは、SQLCA(SQL Communications area)と呼ばれる領域の中から、更新レコード件数を取得できるようです。
SQLCAとは、プログラムとRDMSの間で、統計情報とエラー情報を共有するメモリ領域で、SQLRPGLEは変数定義せずに、SQLCAの変数を参照することができました。
具体的な変数は、SQLERRD配列の3要素目。
SQLにより更新、挿入、削除されたレコード数を「SQLERRD(3)」で取り出します。
その結果を戻り値などで返すパターンが実用的でありましょう。
サンプルSQLRPGLE
EXEC SQL DELETE TABLE_NAME WHERE COMPLETED = '1' AND CRT_DATE <= :W@YYMD; CNT = %DEC(SQLERRD(3):7:0);