ローカルで動いたNode.js × Db2 Warehouseのアプリケーションが、IBM Cloudにプッシュすると挙動が変わってハマったのでメモ
状況
- NodejsでIBM Cloudのサービス「DB2 Warehouse」を利用している
- npmのパッケージibm_dbを利用している
- ローカルでテストするとエラーなく動く
- IBM Cloudにデプロイすると以下のエラーが発生する
SQL0010N「string で始まるストリング定数に、終わりの区切り文字が ありません。」
クラウド上でエラーがでたコード
var ibmdb = require('ibm_db');
ibmdb.open("DATABASE=<dbname>;HOSTNAME=<myhost>;UID=db2user;PWD=password;PORT=<dbport>;PROTOCOL=TCPIP", function (err,conn) {
if (err) return console.log(err);
conn.query('select 1 from sysibm.sysdummy1', function (err, data) {
if (err) console.log(err);
else console.log(data);
conn.close(function () {
console.log('done');
});
});
});
対処方法
明確な原因は不明であるが、同パッケージで提供されているprepareSync(sql)を利用すると正常に動いた。
var ibmdb = require("ibm_db")
, cn = "DATABASE=dbname;HOSTNAME=hostname;PORT=port;PROTOCOL=TCPIP;UID=dbuser;PWD=xxx";
ibmdb.open(cn,function(err,conn){
var stmt = conn.prepareSync("select * from employee where empid = ?");
//Bind and Execute the statment asynchronously
stmt.execute([142], function (err, result) {
data = result.fetchAllSync();
console.log(data);
result.closeSync();
stmt.closeSync();
//Close the connection
conn.close(function(err){});
});
});