我在我的 nodeJs 应用程序中使用 node-oracledb 驱动程序。我必须进行批量插入(最多 6000 行),而simple-oracledb扩展的批量插入功能无法满足我的需求。6000 条记录的速度非常慢。然而,我从 node-oracledb 看到了这篇文章和这篇文档,这似乎是一种很有前途的方式。只是我对 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 列绑定数组,因此我无法弄清楚它是如何为多列(整行)完成的。任何帮助将不胜感激!!!