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

1.1k Views Asked by At

I have an array of users as below

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

I want to fetch data about the above users(if exists) from Hana database. I am using sap-hdbext-promisfied library in node.js.

My database connection is working fine. So, I am trying to execute a select query as below

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;
}

}

Below is the output I get

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

> [email protected] 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
[]

I get an empty array object as output. This is not the expected output, instead it should provide details about the users as they exist in the database.

The above code works when I provide single user value instead of multiple users in an array as shown below

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;
}

}

Output Of Above Code -

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

> [email protected] 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' ]

So, why is it giving an empty array object when I provide an array as a parameter instead of a variable? Is it possible to provide an array as a parameter to the function statementExecPromisified(statement, []) of sap-hdbext-promisfied library in node.js ?

1

There are 1 best solutions below

2
On BEST ANSWER

Your

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

has exactly one value, the String:

"'SAC_XSA_HDB_USER_ABC','SAC_XSA_HDB_USER_DEF'"

When passing the userarr in the statementExecPromisified function as a parameter you are actually passing a nested array in an array. You could either try

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

or separate the values in the userarr and add multiple ? in the prepared statement and reference each single value with userarr[x].