내 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 코드 : 만이 유 배열을 바인딩하는 방법을 보여줍니다 예부터
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
:
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) { . . . });
그러나 이것은 다음과 같은 오류가 발생합니다 1 열의 경우, 여러 행 (전체 행)에서 행해진 결과를 파악할 수 없었습니다. 어떤 도움을 주시면 대단히 감사하겠습니다 !!!
'TYPE의 cidtype는 BINARY_INTEGER BY MY_TABLE.CID %의 타입 인덱스의 테이블; TYPE empidtype은 BINARY_INTEGER BY MY_TABLE.EMPID % TYPE INDEX 테이블입니다. – MT0