问题描述
我的用户列表如下
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]引用每个单个值。