nodejs oracledb从回调中获取数据

时间:2015-07-08 15:07:12

标签: node.js oracle callback

我正在使用 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());

1 个答案:

答案 0 :(得分:0)

简化您的代码和调试。另外,尝试使用一次连接(或者,至少释放两个连接以避免连接泄漏。)。