Используйте транзакцию в node-oracledb - PullRequest
0 голосов
/ 29 мая 2019

Мне нужно выполнить 3 разных оператора обновления в транзакции. Я использую пакет node-oracle. Есть ли пример, который показывает, как должны выполняться транзакции?

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

В репозитории GitHub репозитория есть примеров. Возможно, вы предпочтете взглянуть на ветку dev-4.0 , которая была обновлена ​​для использования асинхронного / ожидающего стиля Node.js 8, что упрощает понимание и корректность (но не забывайте использовать * 1005). *). Также прочитайте руководство .

Пример, который вам нужен: insert1.js , который показывает 3 оператора, формирующих транзакцию. Первые два оператора не фиксируют, но последний использует autoCommit (что экономит стоимость явного commit()):

result = await connection.execute(
  `INSERT INTO test VALUES (:id, :nm)`,
  { id : {val: 1 }, nm : {val: 'Chris'} });

result = await connection.execute(
  `INSERT INTO test VALUES (:id, :nm)`,
  [2, 'Alison']);

result = await connection.execute(
  `UPDATE test SET name = :nm`,
  ['Bambi'],
  { autoCommit: true });  // commit once for all DML in the script
0 голосов
/ 29 мая 2019

Изначально вы можете установить autoCommit false, а когда ваши задачи будут выполнены, вы можете зафиксировать их.

с помощью функции подключения connection.commit (функция (ошибка))

Пример:

var oracledb = require('oracledb');
oracledb.autoCommit = false;

и когда connection.execute () успешно выполняется, вы можете зафиксировать его, как показано ниже

conn.execute(
    "INSERT INTO test VALUES (:id, :nm)",
    [2, 'Alison'],  // Bind values
    function(err, result) {
      if (err) {
        return cb(err, conn);
      } else {
        console.log("Rows inserted: " + result.rowsAffected);  // 1
        conn.commit((error)=> { 
           console.log('Error : ', error);
        });
      }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...