如何将数组作为参数传递给nodejs中sap-hdbext-mismised的statementExecPromisifiedstatement,[]函数?

问题描述

我的用户列表如下

let usersarr = ["'SAC_XSA_HDB_USER_ABC','SAC_XSA_HDB_USER_DEF'"]

我想从Hana数据库获取有关上述用户的数据(如果存在)。我在node.js中使用sap-hdbext-promisfied库。

我的数据库连接工作正常。因此,我正在尝试执行如下选择查询

async function readUsers(xsaDbConn){
try{
       let usersarr = ["'SAC_XSA_HDB_USER_ABC','SAC_XSA_HDB_USER_DEF'"]          

       const checkuserexiststatement = await xsaDbConn.preparePromisified("SELECT USER_NAME FROM USERS WHERE USER_NAME IN (?)")

       let checkuserexistresult = await xsaDbConn.statementExecPromisified(checkuserexiststatement,[usersarr])

       console.log(checkuserexistresult)

       return checkuserexistresult
}catch(err){
    console.log(err)
    return;
}

}

下面是我得到的输出

PS C:\Users\Documents\XSA\SAC_POC\cap_njs> npm start

> cap_njs@1.0.0 start C:\Users\Documents\XSA\SAC_POC\cap_njs
> node server.js

myapp is using Node.js version: v12.18.3
myapp listening on port 3000
[]

我得到一个空数组对象作为输出。这不是预期的输出,而是应该提供有关数据库中存在的用户的详细信息。

当我在数组中提供单个用户值而不是多个用户时,以上代码有效,如下所示

async function readUsers(xsaDbConn,tempxsahdbusers){
try{
     let usersarr = 'SAC_XSA_HDB_USER_ABC'

     const checkuserexiststatement = await xsaDbConn.preparePromisified("SELECT USER_NAME FROM USERS WHERE USER_NAME IN (?)")
     let checkuserexistresult = await xsaDbConn.statementExecPromisified(checkuserexiststatement,[usersarr])

     console.log(checkuserexistresult)

     return checkuserexistresult
}catch(err){
    console.log(err)
    return;
}

}

上述代码输出-

PS C:\Users\Documents\XSA\SAC_POC\cap_njs> npm start

> cap_njs@1.0.0 start C:\Users\Documents\XSA\SAC_POC\cap_njs
> node server.js

myapp is using Node.js version: v12.18.3
myapp listening on port 3000
[ 'SAC_XSA_HDB_USER_ABC' ]

那么,当我将数组作为参数而不是变量提供时,为什么给一个空数组对象呢?是否可以将数组作为参数提供给node.js中sap-hdbext承诺库的function statementExecPromisified(statement,[])?

解决方法

您的

let usersarr = [“'SAC_XSA_HDB_USER_ABC','SAC_XSA_HDB_USER_DEF'”]

只有一个值,即String:

“”'SAC_XSA_HDB_USER_ABC','SAC_XSA_HDB_USER_DEF'“

当在statementExecPromisified函数中将userarr作为参数传递时,实际上是在数组中传递嵌套数组。您可以尝试

xsaDbConn.statementExecPromisified(checkuserexiststatement,[usersarr[0]])

或在userarr中分隔值并添加多个?在准备好的语句中,并使用userarr [x]引用每个单个值。