読者です 読者をやめる 読者になる 読者になる

タイガー!タイガー!じれったいぞー!(SE編)

AS400,WAS,GlassFish,Java,JavaEE,JSF等の開発における日々の気づきをまとめたブログ(備忘録)。

【AS400】SQLRPGLE-挿入、更新、削除件数を取得する

久しぶりに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);