gpt4 book ai didi

node.js - node-oracledb - 使用关联数组进行批量插入

转载 作者:太空宇宙 更新时间:2023-11-04 01:58:22 26 4
gpt4 key购买 nike

我在我的nodeJs应用程序中使用node-oracledb驱动程序。我必须进行批量插入(最多 6000 行),而 simple-oracledb 扩展的批量插入功能不能满足我的需求。对于 6000 条记录来说,速度慢得令人痛苦。然而,我从 node-oracledb 遇到了这个 postthis doc ,这似乎是一种很有前途的方法。只是我对 PL/SQL 不熟悉,不知道如何去做。

所以考虑我有下表:

CREATE TABLE MY_TABLE 
( "CID" NUMBER,
"EMPID" VARCHAR2(10 BYTE));

我有 3 条记录需要批量插入。这是我的 PL/SQL 包:

CREATE OR REPLACE PACKAGE MY_PKG IS
TYPE cidtype IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
TYPE empidtype IS TABLE OF VARCHAR2(10);
PROCEDURE insertproc(cids IN cidtype, empids IN empidtype);
END;
/

CREATE OR REPLACE PACKAGE BODY MY_PKG IS

PROCEDURE insertproc(cids IN cidtype, empids IN empidtype) IS
BEGIN
FORALL i IN INDICES OF cids
INSERT INTO MY_TABLE (cid, empid) VALUES (cids(i), empids(i));
END;

END;
/

我的 NodeJS 代码:

var stmt = `BEGIN MY_PKG.insertproc(:cids, :empids); END;`;
var params = {
cids: {
type: oracledb.NUMBER,
dir: oracledb.BIND_IN,
val: [100, 101, 102]
},
empids: {
type: oracledb.STRING,
dir: oracledb.BIND_IN,
val: ['ab165634', 'df123456', 'cd456789']
}
};

connection.execute(stmt,params,function (err) { . . . });

但是这会引发以下错误:

ORA-06550: line 1, column 7:\nPLS-00306: wrong number or types of arguments in call to 'INSERTPROC'\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored\n

由于该示例仅显示如何为 1 列绑定(bind)数组,因此我无法弄清楚它如何为多列(整行)绑定(bind)数组。任何帮助将不胜感激!!!

最佳答案

var sql = "insert into employee(id,name) values (:1,:2)";
var content = [];
for(i=0;i<data.length.i++)
{
var temp = [];
temp.push(data[i].id);
temp.push(data[i].name);
content.push(temp);
}

connection.executeMany(sql,content,function(err,result)
{
if(err)
console.log(err);
else
console.log("Success");
});

关于node.js - node-oracledb - 使用关联数组进行批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46964852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com