在从nodejs查询oracle数据库时没有获取参数名称

我正在试图从nodejs查询oracledb。 以下是我用于查询的代码

exports.simpleExecute = function(query,bindParams, options,callback) { try { pool.getConnection(function(err, connection) { if (err) { console.log(err); } connection.execute(query,bindParams, options,function(err, data) { console.log(data); if (err) { console.log(err); response.send({}) } callback(null, data); }) }) } catch (err) { callback(err, null); } } 

以下是提出请求的代码:

  database.simpleExecute(query1,{},{outFormat: database.OBJECT},function(err, data1) { // console.log(data2); if (err) { console.log(err); response.send({}); } var percentChange = ((data1.rows[0].COUNT - data1.rows[0].COUNT) / data2.rows[0].COUNT) * 100; var data = [data1.rows[0].COUNT, percentChange]; response.send(data); }); 

where query1 is:“SELECT count(distinct user_id)count_value FROM chatlog to_date('2017-09-09','YYYY-MM-DD')和to_date('2017-10-08','')之间的trunc(timestamp) YYYY-MM-DD')”

问题是,data1.rows参数,而不是作为对象的数组来到只是作为一个数组。 以前,我尝试了一些连接和查询方法从https://jsao.io/2015/03/making-a-wrapper-module-for-the-node-js-driver-for-oracle-database/和东西似乎在这种情况下工作得很好。我也得到data1.rows中的参数的名称。我得到的输出,当我打印data1是:

 { rows: [ [ 1 ] ], resultSet: undefined, outBinds: undefined, rowsAffected: undefined, metaData: [ { name: 'COUNT' } ] } 

你的simpleExecute函数有几个问题。 首先是你将所有东西都包装在try / catch块中。 但是,您无法捕获asynchronous操作(如getConnectionexecute期间发生的exception。

接下来的问题是,在完成使用后,您不会将连接释放回池中。

最后, simpleExecute有一个对response.send({})的引用,它不应该像调用函数处理那样。

下面是一个如何写这个的例子:

 const oracledb = require('oracledb'); const config = require('./dbConfig.js'); let pool; // Callback style simpleExecute function simpleExecute(query, bindParams, options, callback) { pool.getConnection(function(err, conn) { if (err) { callback(err); return } conn.execute(query, bindParams, options, function(err, result) { if (err) { callback(err); } else { callback(null, result); } conn.close(function(err) { if (err) { console.log('error closing conn', err); } }); }); }); } // Example of using simpleExecute after creating the pool oracledb.createPool(config, function(err, p) { if (err) { throw err; } pool = p; simpleExecute( 'select count(*) cnt from dual', {}, { outFormat: oracledb.OBJECT }, function(err, result) { if (err) { console.log(err); return; } console.log(result.rows); // [ { CNT: 1 } ] } ); }); 

您可能会发现有关asynchronous模式的系列很有用: https : //jsao.io/2017/06/how-to-get-use-and-close-a-db-connection-using-various-async-patterns/