node.js - 将数组值批量插入数据库 Node.js、Oracle、orawrap

标签 node.js oracle recursion

我有一个在浏览器中运行并与 REST 服务通信的应用程序。其余服务必须将数据写入 Oracle DB 假设它必须编写如下所示的实体:

var entity =  {
    "id": 0,
    "date": new Date(),
    "comment": 'test'
};

我有一个声明,如下所示:

ar statement = 'INSERT INTO MY_TABLE ( '
        + '    THE_ID '
        + '  , THE_DATE '
        + '  , THE_COMMENT '
        + ' ) VALUES ( '
        + ' :id, '
        + " :date, "
        + ' :comment'
        + ')'; 

实体数组称为:

var entities = [];

现在假设我有一个长度约为 30 的实体数组。我尝试了递归:

var i = 0;
// Function that Batch inserts an Array.
var insertArray = function (statement, entities, i, cb) {
    if (i >= entities.length) { 
        console.log("exit insertArray."); 
        return cb(null, true); 
    }

    insert(statement, entities[i], function (err, val) {
        if (err) { 
            console.log('error insertArray: ', err); 
            return cb(err, null); 
        }

        insertArray(statement, entities, ++i, cb);
    });
};

这是将实体插入数据库的函数

var insert = function (statement, entity, cb) {
    orawrap.execute(
        statement,
        {
            "id": { val: entity.id, dir: oracledb.BIND_INOUT, type: oracledb.NUMBER },
            "date": { val: entity.date, dir: oracledb.BIND_INOUT, type: oracledb.DATE },
            "comment": { val: entity.comment, dir: oracledb.BIND_INOUT, type: oracledb.STRING }
        },
        cb);
};

此代码在大约 3 次递归调用后停止插入。 我也尝试过 for 循环。但由于在异步环境中使用回调更好,因此递归的想法对我来说似乎更好。无论如何,迭代方法也没有批量插入值。

你知道如何解决这个问题吗?

最佳答案

在 Node.js 中执行此类任务的最简单方法是使用异步库。查看异步库的 eachSeries 方法: https://github.com/caolan/async#each

该链接指向 each,但 eachSeries 只是 each 的变体,它按系列(一个接一个)运行事物,而不是比并行。您只需传递数组、应该为数组中的每个元素运行的函数以及迭代完成后要调用的另一个函数。

关于node.js - 将数组值批量插入数据库 Node.js、Oracle、orawrap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34270898/

相关文章:

javascript - Node.js + Mocha + Should.js 如何测试事件发射器抛出的错误?

node.js - Redis SET 与 SETNX 性能对比

sql - 根据另一列的值选择列

c - 在 C 中处理长递归产生式时如何防止堆栈溢出?

javascript - 带 LIMIT 的 MySQL 查询并按 block 更新数据

javascript - Node.js 可以在 Chrome 中使用其 native 客户端运行客户端(即将发布)

oracle - 确保该列遵循 Oracle 中的序列

oracle - oracle表中自动填充日期

sql - 递归查询在服务器上执行但不在本地执行

algorithm - 是否有没有递归形式的算法特征?