私のnodeJsアプリケーションでnode-oracledbドライバを使用しています。私は一括挿入(6000行まで)を行う必要があり、simple-oracledbのバッチ挿入機能は私のニーズを満たしていませんでした。 6000レコードでは痛いほど遅いです。しかし、これはノード-oracledbからpostとthis docになっていましたが、これは有望な方法のようです。 PL/SQLの新機能で、これを行う方法を理解できません。node-oracledb - 連想配列を使用したバルク挿入
だから私は、次の表を持って考えてみます。
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
例のみuは、配列をバインドする方法を示しているので1列のために、私はどのように複数の列(行全体)のために行われたのか理解できませんでした。どんな助けでも大歓迎です!!!
'TYPEのcidtypeがBINARY_INTEGER BY MY_TABLE.CID%タイプのインデックスを示す表です。 タイプempidtypeはMY_TABLE.EMPID%TYPE INDEX BY BINARY_INTEGER;のテーブルです。 – MT0