node-oracledb – 使用关联数组的批量插入

Im在我的nodeJs应用程序中使用node-oracledb驱动程序。 我不得不做大容量插入(最多6000行),并且simple-oracledb扩展的批量插入function不能满足我的需要。 6000条logging的速度很慢。 我遇到这个post , 这个文件从节点oracledb然而,这似乎是一个有前途的方式。 这只是我对PL / SQL的新意,我不知道如何去做。

所以考虑我有下面的表格:

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

我有3个logging批量插入。 这是我的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列,我无法弄清楚它是如何完成多列(整个行)。 任何帮助将不胜感激!!!

我在这里谈了一下,但是我真的需要更多的例子。

如果您将“INDEX BY BINARY_INTEGER”添加到您的empidtypetypes,您的代码将工作。 这将其从嵌套表更改为关联数组,这是驱动程序可以绑定到的。

下面是我回答的一个类似的问题: 如何使用节点js将多个logging插入到oracle数据库中

另一个演示如何批量执行此操作(第二个示例): Node.js + OracleDb – 多次插入最后一个date

现在asynchronous/等待批处理会更容易。

最后(我保证),你可能会发现这些幻灯片有趣: https : //www.dropbox.com/s/69jt5uu1fqus84c/Tips%20and%20Tricks%20for%20Getting%20Started%20with%20the%20Oracle%20Database%20Driver%20for %20Node.pdf?DL = 0