如何查询节点odbc/sybase中的存储过程



经过大量的谷歌搜索,我找到了一种查询古老的sybase数据库的方法,开始为我正在使用nodeodbc开发的移动应用程序构建rest api(https://github.com/markdirish/node-odbc/blob/master/README.md#callprocedurecatalog-架构名称参数回调)。

我已经成功地使用select语句进行了查询,但出于安全考虑,我不希望这样做。当我尝试使用存储过程时,我会得到一个奇怪的响应。我需要在这里检查一下,弄清楚我遗漏了什么。

我尝试过的一个示例存储过程是一个简单的sp,它有一个参数来使用帐号检查电子邮件地址(这当然是一个假的sp,但格式相同):

"DB"spGetEmail";(@acctnum varchar(50))

文档显示:

const odbc=require('dbc');

odbc.connect(${process.env.CONNECTION_STRING},(错误,连接)=>{connection.callProcedure(null,null,'MY_PROC',[未定义],(error,result)=>{if(error){console.error(error)}//句柄//result包含一个结果数组,并具有parameters属性以访问过程返回的参数。console.log(结果);});});

我把它解释成这样:

odbc.connect(${process.env.CONNECTION_STRING},(error,CONNECTION)=>{connection.callProcedure(null,"DB","spGetEmail",[123456],(error,result)=>{if(error){console.error(error)}//句柄//result包含一个结果数组,并具有parameters属性以访问过程返回的参数。console.log(结果);});});

然后我得到这个:

[Error:[odbc]过程所需的参数数量,以及传递的参数数不相等]{odbcErrors:[]}未定义的分段故障

看起来很直接,我错过了一些参数,但我知道我不是。当sp需要一个参数!

我在这里错过了什么??

[已解决]我不确定内置的.callProcedure()方法是坏了还是不适合Sybase16,但我找到了一种方法来解决它,以防将来对任何人都有帮助。不要使用callProcedure()方法,而是执行以下操作:

odbc.connect(connectionString, (error, connection) => {
let my_procedure = "exec spGetEmail @acct='12345678'"
connection.query(my_procedure, (error, result) => {
if (error) { console.error(error) }
console.log(result);
});
}); 

相关内容

  • 没有找到相关文章

最新更新