Как обрабатывать много строк результатов в Oracle Database с Node, JS - PullRequest
0 голосов
/ 17 июня 2019

Я делаю запрос к базе данных оракула, но есть много строк результатов, поэтому я получаю куча JavaScript из памяти ошибка.

Есть ли способ обработать результат запроса пакетным способом или что-то еще, чтобы не вывести ошибку из памяти?

1 Ответ

1 голос
/ 17 июня 2019

Вы не указали, но я предполагаю, что вы используете node-oracledb. Если это так, то хитрость заключается в использовании объекта ResultSet. Это обеспечит согласованное для чтения представление данных (представление данных за один раз во времени с момента запуска запроса), позволяя при этом передавать данные по проводам: https://oracle.github.io/node-oracledb/doc/api.html#streamingresults

Вот пример, который использует экземпляр QueryStream. Класс QueryStream - это просто оболочка в ResultSet для предоставления потоковых API.

var oracledb = require('oracledb');
var dbConfig = require('./dbconfig.js');

var rowcount = 0;

oracledb.getConnection(
  {
    user          : dbConfig.user,
    password      : dbConfig.password,
    connectString : dbConfig.connectString
  },
  function(err, connection) {
    if (err) {
      console.error(err.message);
      return;
    }

    var stream = connection.queryStream(
      'SELECT first_name, last_name FROM employees ORDER BY employee_id',
      [],  // no binds
      { fetchArraySize: 150 }  // internal buffer size for performance tuning
    );

    stream.on('error', function (error) {
      // console.log("stream 'error' event");
      console.error(error);
      return;
    });

    stream.on('metadata', function (metadata) {
      // console.log("stream 'metadata' event");
      console.log(metadata);
    });

    stream.on('data', function (data) {
      // console.log("stream 'data' event");
      console.log(data);
      rowcount++;
    });

    stream.on('end', function () {
      // console.log("stream 'end' event");
      console.log('Rows selected: ' + rowcount);
      connection.close(
        function(err) {
          if (err) {
            console.error(err.message);
          }
        });
    });
  });

Возможно, вы собираетесь передавать результаты в файл или объект ответа HTTP. В любом случае вам, скорее всего, понадобится правильный JSON, а не отдельные строки, которые возвращает драйвер. Посмотрите на эту проблему, чтобы узнать, как вы можете это сделать: https://github.com/oracle/node-oracledb/issues/908#issuecomment-390006986

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...