Java
Node.js
AS400
IBMi
node-jt400

node-jt400を試してみた(execute)

execute

コーディング例にはありませんが、executeというメソッドもあります。
推測するに、戻り値の無いSQLが発行できそうです。

という事で、QCMDEXCが実行できるか試してみました。
OVRDBFが実行できれば、メンバーが利用できますね。

まず、物理ファイル:MEMBERにメンバー(ADDMEMBER)を追加します。
(ちょっとネーミングがややこしくなってしまいました。)

ADDPFM FILE(MYLIB/MEMBER) MBR(ADDMEMBER) TEXT('メンバー追加')

以下のデータをDFUで追加しました。
nodejt13.png

SQLexecute.js
app.get("/execute", function (req, res, next) {
  let execstmt = "CALL QCMDEXC('OVRDBF FILE(MEMBER) TOFILE(MYLIB/MEMBER) MBR(ADDMEMBER) OVRSCOPE(*JOB)',70)";
  let sqlstmt = "select * from member";
  pool.execute(execstmt).then(
    function (result) {
      pool.query(sqlstmt).then(
        function (result){
          res.json(result);
        }
      )
    });
});

実行してみました。
nodejt14.png

OVRDBFが上手く行っていないようです。
WRKACTJOBで確認するとQZDASOINITが二つ存在していて、OVRDBFとSQLが別のジョブになっていました。

前回試したトランザクションは同じpoolを使うようなので、そちらで書き直してみました。

SQLexecute.js
app.get("/execute2", function (req, res, next) {
    pool.transaction(function (tran) {
        return tran.execute("CALL QCMDEXC('OVRDBF FILE(MEMBER) TOFILE(MYLIB/MEMBER) MBR(ADDMEMBER) OVRSCOPE(*JOB)',70)" 
        ).then(function () {
            return tran.query("select * from member").then(
              function (result)
            {
              res.send(result);          
            } 
        )});
    });
});

nodejt15.png

今度は上手く行きました。