【发布时间】:2019-10-14 20:20:40
【问题描述】:
我需要在一个事务中执行 3 个不同的更新语句。我正在使用 node-oracle 包。有没有例子说明如何进行交易?
【问题讨论】:
标签: database oracle node-oracledb
我需要在一个事务中执行 3 个不同的更新语句。我正在使用 node-oracle 包。有没有例子说明如何进行交易?
【问题讨论】:
标签: database oracle node-oracledb
最初您可以将autoCommit设置为false,一旦您的任务完成,您就可以提交它。
通过使用连接函数connection.commit(function(error))
例子:
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);
});
}
});
【讨论】:
true。这将节省显式 commit() 的往返。
有examples in the node-oracledb GitHub repo。这些示例已更新为使用 Node.js 8 的 async/await 样式,使其更易于理解和正确(但不要忘记使用 await)。另请阅读manual。
您想要的示例是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
【讨论】: