在Db2中执行SQL“delete from(tablename)"时,“警告”被视为“错误”

j5fpnvbx  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(334)

数据库服务器:Db2 v11.5.7.0扩展插件映像(https://hub.docker.com/r/ibmcom/db2
数据库客户端:node.js +节点 db2 库(https://www.npmjs.com/package/db2
我正在用Node.js开发Web应用程序,它使用了IBM Db2(Docker图像)。几乎所有的操作都运行良好,但我面临着一个奇怪的行为,似乎是产品故障。
我的代码是这样的。当我试图从表中删除所有记录时,我的意思是当我试图执行“delete from 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
        :
        :
    }
  });
}

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

zbdgwd5y

zbdgwd5y1#

它是按设计工作的。请看一下文档: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();
    });
  });

相关问题