如何将数组作为参数传递给 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].
引用每个单个值
我有如下一组用户
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].
引用每个单个值