如何解决使用 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 选项以查看结果计数,per this documentation
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','Madrid' ] ]
const data =[
[ 'khaled','Madrid' ]
];
const options = {autoCommit:true,batchErrors: true};
const sql = 'DELETE FROM USERS WHERE u_name= :1 and u_town = :2';
const res1 = await connection.executeMany(sql,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','Madrid' ] ]
{ rowsAffected: 2,1 ] }
[]
在 SQL*Plus 中:
SQL> select * from users;
no rows selected
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。