我正在使用 nodejs 和 oracle-db 模块。我将尽可能简单地解释代码。首先,我将获得列信息(列名,数据类型,长度....)然后我将从每列获取数据,最后将数据附加到特定列并返回所有列。问题是我无法从回调中获取数据。谢谢你的帮助。
var oracledb = require('oracledb');
function getRows(columnName, tableName) {
var values = [] ;
oracledb.getConnection({user: "hr", password: "oracle"},
function(err, connection)
{
if (err) {console.error(err.message);return;}
connection.execute("select "+ columnName +" from "+tableName+" ",
function(err, result)
{
if (err) {console.error(err.message); return;}
var i = 0 ;
if ( i < result.rows.length ) {
values.push({rownumber: i, value: result.rows[i][0] });
i++; }
return values;
});
});
return values;
}
function getColumns() {
var Columns = [] ;
oracledb.getConnection( { user: "hr", password: "oracle" },
function(err, connection) {
if (err) { console.error(err.message); return;}
connection.execute( "select distinct table_name, column_name, data_type, data_precision, data_length,GLOBAL_STATS, NULLABLE from all_tab_columns where owner like 'HR' order by table_name ",
function(err, result) {
if(err){
console.error(err.message);
doRelease(connection);
return;}
var k = 0;
if(k < result.rows.length) {
//get data from each column
var values = getRows(result.rows[k][1], result.rows[k][0]);
//get the name of the table and the column name
Columns.push({id: k, columnName: result.rows[k][1],tableName: result.rows[k][0], values: values });
k++;
}
});
});
return Columns;
}
console.log(getColumns());
答案 0 :(得分:0)
简化您的代码和调试。另外,尝试使用一次连接(或者,至少释放两个连接以避免连接泄漏。)。