Удаление нескольких записей с помощью node-oracledb executeMany - PullRequest
0 голосов
/ 08 ноября 2019

Я хочу удалить несколько строк из oracle db в проекте nodejs. Я использую oracledb (4.0.1) с узлом (v10.14.2)

В то время как я делаю, я получил ошибку, которая такова;{"level":50,"time":1573197878989,"msg":"Failed: Error: DPI-1050: Oracle Client library is at version 11.2 but must be at version 12.1 or higher Case: ora.deleteMany","pid":11092,"hostname":"***","v":1} В соответствии с этой ошибкой он утверждает, что проблема с Oracle Client. Но мой клиент Oracle уже 12.2.0.1.0 .

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

Я объясню, как я кодирую ниже.

Это идентификаторы, которые я хочу удалить из таблицы. [ { ID: 11865 }, { ID: 23249 } ] Я генерирую этот список json с помощью запроса SELECT. Он вернул мне эти идентификаторы для удаления в виде списка json.

const getTodayDailyDiff = async config => {
  let test = [];
  const today = new Date().toISOString().split('T')[0];
  let connection;
  try {
    connection = await oracledb.getConnection(config);
    test = await connection.execute(
      `
    (SELECT ID FROM TNT.DAILY_DIFF
      WHERE TO_CHAR(DIFF_DATE, 'YYYY-MM-DD') = :today)
      `,
      [today]
    );
  } catch (err) {
    log.error(err, 'ora.diffReport');
  } finally {
    if (connection) {
      connection.close();
    }
  }
  return test;
};

Затем я отправил этот список json (getTodayDailyDiff.rows) на мой запрос DELETE.

const deleteMany = async (config, getTodayDailyDiff.rows) => {
  let test = [];
  let connection;
  const sql = `DELETE FROM DAILY_DIFF WHERE ID = :ID`;
  const options = {
    dmlRowCounts: true,
    autoCommit: true
  };
  try {
    connection = await oracledb.getConnection(config);
    test = await connection.executeMany(sql, getTodayDailyDiff.rows, options);
  } catch (err) {
    log.error(err, 'ora.deleteMany');
  } finally {
    if (connection) {
      connection.close();
    }
  }
  return test;
};

1 Ответ

1 голос
/ 08 ноября 2019

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

DELETE FROM DAILY_DIFF WHERE ID in (SELECT ID FROM TNT.DAILY_DIFF
      WHERE TO_CHAR(DIFF_DATE, 'YYYY-MM-DD') = '${today}')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...