繁体   English   中英

使用 ExecuteMany Oracledb Node-Oracledb 删除多行

[英]Deleting mutliple rows with ExecuteMany Oracledb Node-Oracledb

拜托,我找不到问题出在哪里。

我遵循了与 GitHub 示例完全相同的方法,但它仍然不起作用。

没有事件,但每次都是 0 rowAffected。

问题与删除有关,插入它工作正常。

代码:

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 客户端上尝试时,它工作正常,数据存在。

预先感谢您的回答。

您是否确认这些行实际上没有被删除? 它们可能是,而您只是在rowsAffected 中看到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);

这个对我有用。 例如:

/*

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*Plus 中:

SQL> select * from users;

no rows selected

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM