如何在DB2 nodeJS选择查询where子句中使用IN参数

dfddblmv  于 2023-01-05  发布在  DB2
关注(0)|答案(1)|浏览(298)

我尝试在nodeJS的IBM_DB2中的选择查询的WHERE子句中使用IN参数。
我尝试了以下方法:

const conn = await ibmdb.open(connStr);
const query = 'SELECT NAMES FROM DB.TABLE WHERE SETUP_DATE > ? AND ID IN (?)';
const prepareSmt = await connection.prepare(query);
const result = await prepareSmt.execute(['230101', ['123','124','125']]);
const data = await result.fetchAllSync();
console.log("result = ", data);

当执行上述操作时:我总是得到错误:

Error: Wrong param format!
    at /Users/USERNAME/workspace/learning/ibmDB2/node_modules/ibm_db/lib/odbc.js:1550:12
    at SimpleQueue.next (/Users/USERNAME/workspace/learning/ibmDB2/node_modules/ibm_db/lib/simple-queue.js:34:5)
    at SimpleQueue.maybeNext (/Users/USERNAME/workspace/learning/ibmDB2/node_modules/ibm_db/lib/simple-queue.js:22:10)
    at SimpleQueue.push (/Users/USERNAME/workspace/learning/ibmDB2/node_modules/ibm_db/lib/simple-queue.js:15:8)
    at ODBCStatement.odbc.ODBCStatement.execute (/Users/USERNAME/workspace/learning/ibmDB2/node_modules/ibm_db/lib/odbc.js:1524:14)
    at main (/Users/USERNAME/workspace/learning/ibmDB2/index.js:14:29)
    at processTicksAndRejections (internal/process/task_queues.js:95:5)

当我使用没有IN参数的查询时,同样的查询也能工作。有人能帮助我如何构造查询并在选择查询中使用IN参数时传递值吗?
使用TOAD,我们可以执行如下查询:Select NAMES from DB.TABLE where SETUP_DATE > '230101' AND ID IN ('123','124','125')
我正尝试从IBM_DB2节点js执行相同的命令。
谢谢纳温

x6yk4ghg

x6yk4ghg1#

免责声明,我不知道nodejs,所以这不是一个答案本身,而是成为一个评论的长度。根据executeApi,你可以声明一个数组为:

var param1 = {ParamType:"ARRAY", DataType:1, Data:['230101', '230101', '230101']}; 
var param2 = {ParamType:"ARRAY", DataType:1, Data:[123, 124, 125]};

所以我想你可以这样做:

var queryOptions = {sql:"'SELECT NAMES FROM DB.TABLE WHERE SETUP_DATE > ? AND ID = ?'", params: [param1, param2], ArraySize:3};

conn.query(queryOptions, function(err, result) {
...

如果这能把你引向正确的方向,请随意添加你自己的答案。在评论中让我知道,我可以删除这一条。
如果您有许多数量不同的参数,则可能需要研究DECLARE GLOBAL TEMPORARY TABLE,在其中插入参数,然后在查询中对该表进行连接

相关问题