अपडेट 2019/04/25:
ड्राइवर, संस्करण 2.2 के बाद से, बैच SQL निष्पादन के लिए अंतर्निहित समर्थन है। connection.executeMany()
का उपयोग करें इसके लिए जब संभव हो। यह कम जटिलता के साथ सभी प्रदर्शन लाभ प्रदान करता है। अधिक विवरण के लिए दस्तावेज़ीकरण का बैच विवरण निष्पादन अनुभाग देखें:https://oracle.github.io/node-oracledb/doc/api.html#batcheexecution
पिछला उत्तर:
वर्तमान में, ड्राइवर केवल PL/SQL के साथ सरणी बाइंड का समर्थन करता है, सीधे SQL का नहीं। हम भविष्य में इसमें सुधार की उम्मीद करते हैं। अभी के लिए, आप निम्न कार्य कर सकते हैं...
इस तालिका को देखते हुए:
create table things (
id number not null,
name varchar2(50) not null
)
/
निम्नलिखित कार्य करना चाहिए:
var oracledb = require('oracledb');
var config = require('./dbconfig');
var things = [];
var idx;
function getThings(count) {
var things = [];
for (idx = 0; idx < count; idx += 1) {
things[idx] = {
id: idx,
name: "Thing number " + idx
};
}
return things;
}
// Imagine the 'things' were fetched via a REST call or from a file.
// We end up with an array of things we want to insert.
things = getThings(500);
oracledb.getConnection(config, function(err, conn) {
var ids = [];
var names = [];
var start = Date.now();
if (err) {throw err;}
for (idx = 0; idx < things.length; idx += 1) {
ids.push(things[idx].id);
names.push(things[idx].name);
}
conn.execute(
` declare
type number_aat is table of number
index by pls_integer;
type varchar2_aat is table of varchar2(50)
index by pls_integer;
l_ids number_aat := :ids;
l_names varchar2_aat := :names;
begin
forall x in l_ids.first .. l_ids.last
insert into things (id, name) values (l_ids(x), l_names(x));
end;`,
{
ids: {
type: oracledb.NUMBER,
dir: oracledb.BIND_IN,
val: ids
},
names: {
type: oracledb.STRING,
dir: oracledb.BIND_IN,
val: names
}
},
{
autoCommit: true
},
function(err) {
if (err) {console.log(err); return;}
console.log('Success. Inserted ' + things.length + ' rows in ' + (Date.now() - start) + ' ms.');
}
);
});
वह डेटाबेस में एक राउंडट्रिप के साथ 500 पंक्तियां डालेगा। साथ ही, DB में SQL और PL/SQL इंजनों के बीच एकल संदर्भ स्विच।
जैसा कि आप देख सकते हैं, सरणियों को अलग से बांधना होगा (आप वस्तुओं की एक सरणी को बांध नहीं सकते हैं)। यही कारण है कि उदाहरण दर्शाता है कि बाध्यकारी उद्देश्यों के लिए उन्हें अलग-अलग सरणी में कैसे तोड़ना है। यह सब समय के साथ और अधिक सुरुचिपूर्ण होना चाहिए, लेकिन यह अभी के लिए काम करता है।