Oracle 删除语句在 JS 中不起作用

Oracle delete statement is not working in JS

我正在尝试使用以下 JS 函数从 Oracle 数据库中的 table 中删除一行:

deleteDirection(directionId, callback) {
if (!this.connected) {
  return Promise.reject(new Error('not connected')).asCallback(callback)
}
const connection = this.connection

const task = Promise.coroutine(function* () {
  const conn = yield connection
  const query = 'DELETE FROM directions WHERE direction_id = :directionId'
  const result = yield conn.execute(query, { directionId }, {
    outFormat: oracle.OBJECT,
  })
  .then(directionDeleted => {
    if (directionDeleted.rowsAffected === 0) {
      return Promise.reject(new Error('invalid number'))
    }
    return Promise.resolve(directionDeleted)
  })
  .catch(err => Promise.reject(new Error(err)));

  return Promise.resolve(result)
})
return Promise.resolve(task()).asCallback(callback)
}

函数完成没有任何问题,但行没有被删除,如果我在 Oracle SQL Developer 上尝试相同的语句,它工作正常,可能是什么问题?

按照 NodeOracle 示例并将参数作为数组传递:

const result = yield conn.execute(query, [ directionId ], {
    outFormat: oracle.OBJECT,
  })

https://github.com/oracle/node-oracledb/blob/master/examples/select1.js

试试这个:

deleteDirection(directionId, callback) {
if (!this.connected) {
  return Promise.reject(new Error('not connected')).asCallback(callback)
}
const connection = this.connection

const task = Promise.coroutine(function* () {
  const conn = yield connection
  const query = 'DELETE FROM directions WHERE direction_id = :directionId'
  const result = yield conn.execute(query, { directionId:  directionId}, {
    outFormat: oracle.OBJECT,
    autoCommit: true
  })
  .then(directionDeleted => {
    if (directionDeleted.rowsAffected === 0) {
      return Promise.reject(new Error('invalid number'))
    }
    return Promise.resolve(directionDeleted)
  })
  .catch(err => Promise.reject(new Error(err)));

  return Promise.resolve(result)
})
return Promise.resolve(task()).asCallback(callback)
}

注意绑定变量的变化和 autoCommit 的使用。

您在使用转译器吗?