使用nodeJs+express+oracledb时,需要读取clob字段,花费了许多时间。因为网上没有现成的东西,只好自己看oracledb在github上的文档,终于找到了解决办法。
参考网址:
oracledb说明文档
oracledb中对lob字段的处理
主要的代码是下边的两行,将BLOB和CLOB统一转为oracledb指定的类型即可
oracledb.fetchAsBuffer = [ oracledb.BLOB ];
oracledb.fetchAsString = [ oracledb.CLOB ];
解决之后的代码如下
let util = require('util');
let dbUtil = require('../util');
let oracledb = require('oracledb');
let dbConfig = {
user: 'test',
password: '1',
connectString: '127.0.0.1:1521/ORCL'
};
//主要是这两行,在oracledb的文档中其实也有其它方法
//但是为了封装方法,采用如下方法统一处理
oracledb.fetchAsBuffer = [ oracledb.BLOB ];
oracledb.fetchAsString = [ oracledb.CLOB ];
function executeQuery(sql, paramArr) {
return function (callback) {// 这里是给async提供的回调
oracledb.getConnection(dbConfig,
function (err, connection) {
if (err) {
console.error(err.message);
return;
}
connection.execute(
sql,
paramArr,
function (err, result) {
if (err) {
console.error(err.message);
return;
}
doRelease(connection);
let r = dbUtil.toObjList(result);
return callback(err, r);
});
});
}
}
function doRelease(connection) {
connection.close(
function (err) {
if (err)
console.error(err.message);
});
}
module.exports = {executeQuery};