2017-10-26 18 views
1

私のnodeJsアプリケーションでnode-oracledbドライバを使用しています。私は一括挿入(6000行まで)を行う必要があり、simple-oracledbのバッチ挿入機能は私のニーズを満たしていませんでした。 6000レコードでは痛いほど遅いです。しかし、これはノード-oracledbからpostthis 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列のために、私はどのように複数の列(行全体)のために行われたのか理解できませんでした。どんな助けでも大歓迎です!!!

+0

'TYPEのcidtypeがBINARY_INTEGER BY MY_TABLE.CID%タイプのインデックスを示す表です。 タイプempidtypeはMY_TABLE.EMPID%TYPE INDEX BY BINARY_INTEGER;のテーブルです。 – MT0

答えて

0

私は少しabout this hereを話し、本当に私はあなたのempidtypeタイプに「BINARY_INTEGER BY INDEX」を追加した場合

あなたのコードは動作します...より多くの例を持っている必要があります。これにより、ネストしたテーブルから、ドライバが現在バインドできる連想配列に変更されます。バッチで(第2例)、これを行う方法を示している別のHow to insert multiple records into oracle db using node js

そして:

は、ここで私は答えた同様の質問ですNode.js + OracleDb - Insert the last date many times

バッチ処理は今with async/awaitずっと容易になるだろう。最後に

(私は約束する)、あなたはこれらのスライドは面白いかもしれません: https://www.dropbox.com/s/69jt5uu1fqus84c/Tips%20and%20Tricks%20for%20Getting%20Started%20with%20the%20Oracle%20Database%20Driver%20for%20Node.pdf?dl=0

関連する問題