在 Db2 中执行 SQL 时,"警告"被视为"错误","从(表名)中删除"



数据库服务器:Db2 v11.5.7.0 docker镜像(https://hub.docker.com/r/ibmcom/db2)

数据库客户端:node.js+node-db2库(https://www.npmjs.com/package/db2)

我正在使用Node.js开发web应用程序,该应用程序使用IBMDb2(docker镜像(。几乎所有的操作都很好,但我面临着一个奇怪的行为,似乎是产品故障。

我的代码是这样的。当我试图从表中删除所有记录时,我的意思是当我试图执行";从xxxx删除";SQL,操作本身将按预期工作(操作后将删除所有记录(,但应该有一个";警告";消息,因为它操作整个表。警告对我来说很好。但在我的Node.js代码中;警告";将被处理为";错误";SQL状态为"01504":

// connection
var database_url = 'DATABASE=db;HOSTNAME=xx.xx.xx.xx;UID=user;PWD=pass;PORT=50000;PROTOCOL=TCPIP';
var Pool = require( 'ibm_db' ).Pool;
var pool = new Pool();
pool.init( 5, database_url );
pool.open( database_url, function( err, conn ){
conn.query( 'delete from xxxx', [], function( err, result ){
if( err ){
// here
conn.close();
console.log( err );  //"[DataDirect][ODBC DB2 Wire Protocol driver][UDB DB2 for Windows, UNIX, and Linux]The SQL statement will modify an entire table or view."
}else{
// not here
:
:
}
});
}

我不确定这是来自服务器还是客户端驱动程序。我错过了任何作战准备吗?我该怎么处理?

它是按设计工作的。查看文档:https://github.com/ibmdb/node-ibm_db/blob/master/APIDocumentation.md

如果返回的值是>,则应该使用getSQLErrorSync方法;0则为警告,如果是<0这是一个错误:

conn.querySync("insert into mytab1 values ( 5, 'abc')");
conn.prepare("select * from mytab1", function (err, stmt) {
stmt.execute(function(err, result) {
console.log("Fetched Data = ", result.fetchAllSync() );
var problem = result.getSQLErrorSync();
if (problem.sqlcode < 0) { // This sqlcode is negative and is therefore an error
console.log("SQLError = ", problem);
} else if (problem.sqlcode > 0) { // This sqlcode is positive and is therefore a warning
console.log("SQLWarning = ", problem);
}
result.closeSync();
conn.closeSync();
});
});

最新更新