如何将数组作为参数传递给 nodejs 中 sap-hdbext-promisfied 的 statementExecPromisified(statement,[]) 函数?

How to pass an array as a parameter to statementExecPromisified(statement,[]) function of sap-hdbext-promisfied in nodejs?

我有如下一组用户

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

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

中使用 sap-hdbext-promisfied 库

我的数据库连接工作正常。所以,我正在尝试执行如下 select 查询

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-promisfied 库的函数 statementExecPromisified(statement, []) 提供一个数组作为参数?

你的

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

只有一个值,字符串:

"'SAC_XSA_HDB_USER_ABC','SAC_XSA_HDB_USER_DEF'"

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

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

或者分隔 userarr 中的值并添加多个 ?在准备好的语句中并使用 userarr[x].

引用每个单个值