Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Node.js का उपयोग करके Oracle DB में एकाधिक रिकॉर्ड कैसे सम्मिलित करें?

अपडेट 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 इंजनों के बीच एकल संदर्भ स्विच।

जैसा कि आप देख सकते हैं, सरणियों को अलग से बांधना होगा (आप वस्तुओं की एक सरणी को बांध नहीं सकते हैं)। यही कारण है कि उदाहरण दर्शाता है कि बाध्यकारी उद्देश्यों के लिए उन्हें अलग-अलग सरणी में कैसे तोड़ना है। यह सब समय के साथ और अधिक सुरुचिपूर्ण होना चाहिए, लेकिन यह अभी के लिए काम करता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. iSQL प्लस में डेटाबेस नाम चुनें

  2. ओरेकल के लिए सी # पैरामीटरयुक्त प्रश्न - गंभीर और खतरनाक बग!

  3. मैं Oracle SQL डेवलपर में क्वेरी विंडो से परिणामों का एक सेट कैसे लौटा सकता हूँ?

  4. एक अंतराल के साथ Oracle जनरेटिंग शेड्यूल पंक्तियाँ

  5. समय क्षेत्र के लिए Oracle दिनांक स्वरूपण मुखौटा क्या है?