Удаление строк mutliple с помощью узла ExecuteMany Oracledb-Oracledb

#node.js #express #node-oracledb

Вопрос:

пожалуйста, я не могу найти, в чем проблема.

Я следовал точно тому же методу, что и в примерах GitHub, но он все равно не работает.

Никаких инцидентов нет, но каждый раз, когда это 0, это не влияет.

Проблема связана с удалением, с вставкой все работает нормально.

код:

 data =[
  [ 'khaled', 'Paris' ],
  [ 'ivan', 'Madrid' ]
 ];

const sql = 'DELETE FROM USERS WHERE u_name= :1 and u_town = :2'

const res1 = await connection.executeMany(sql,data,{autoCommit:true});

console.log(res1) ==> rowAffected=0
 

и когда я пробую это на клиенте oracle, это работает, данные существуют.

Заранее спасибо за ваши ответы.

Комментарии:

1. Убедитесь, что вы подключаетесь к одной и той же базе данных и пользователю в Node.js и «клиент oracle» (что бы это ни было).

Ответ №1:

Вы подтвердили, что строки на самом деле не удаляются? Они могут быть, и вы просто видите 0 в рядах затронутых? Если это так, вы можете попробовать установить параметр dmlRowCounts, чтобы просмотреть количество результатов в соответствии с этой документацией

 data =[
  [ 'khaled', 'Paris' ],
  [ 'ivan', 'Madrid' ]
 ];
const options = {autoCommit:true, dmlRowCounts: true, batchErrors: true}
const sql = 'DELETE FROM USERS WHERE u_name= :1 and u_town = :2'

const res1 = await connection.executeMany(sql,data,options);

console.log(res1) ==> rowAffected=0
console.log(res1.dmlRowCounts);
console.log(res1.batchErrors);
 

Комментарии:

1. спасибо за ваш ответ, да, я сделал, и строки все еще не удаляются 🙁

2. Можете ли вы попробовать внести дополнительные изменения выше и опубликовать результат? Кроме того, на каком примере github вы основываете это? Можете ли вы добавить ссылку на это?

3. Примерами исполняемых файлов являются файлы em_* в github.com/oracle/node-oracledb/tree/main/examples

Ответ №2:

Это работает на меня. Например:

 /*

drop table users;
create table users (u_name varchar2(20), u_town varchar2(20));
insert into users values ( 'khaled', 'Paris' );
insert into users values ( 'ivan', 'Madrid' );
commit;
select * from users;

*/

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

if (process.platform === 'darwin') {
  oracledb.initOracleClient({libDir: process.env.HOME   '/Downloads/instantclient_19_8'});
}

async function run() {
  let connection;

  try {
    connection = await oracledb.getConnection(dbConfig);

    const res = await connection.execute(`select * from users`);
    console.log(res.rows);  // [ [ 'khaled', 'Paris' ], [ 'ivan', 'Madrid' ] ]
    
    const data =[
      [ 'khaled', 'Paris' ],
      [ 'ivan', 'Madrid' ]
    ];
    const options = {autoCommit:true, dmlRowCounts: true, batchErrors: true};
    const sql = 'DELETE FROM USERS WHERE u_name= :1 and u_town = :2';

    const res1 = await connection.executeMany(sql,data,options);
    console.log(res1);  // { rowsAffected: 2, dmlRowCounts: [ 1, 1 ] }
    

    const res2 = await connection.execute(`select * from users`);
    console.log(res2.rows);  // []
    
} catch (err) {
    console.error(err);
  } finally {
    if (connection) {
      try {
    await connection.close();
      } catch (err) {
    console.error(err);
      }
    }
  }
}

run();

 

Выход есть:

 [ [ 'khaled', 'Paris' ], [ 'ivan', 'Madrid' ] ]
{ rowsAffected: 2, dmlRowCounts: [ 1, 1 ] }
[]
 

И в SQL*Плюс:

 SQL> select * from users;

no rows selected