2017-02-16 92 views
1

你还在处理这个问题吗?节点没有为成功的存储过程返回值

CALL eveql.sp_matFinder('ishkur'); 

在DBeaver中成功返回并为我返回15行。 我在node.js中为这个调用遵循了这个语法。

connection.query('CALL eveql.sp_matFinder(?);', [itemName], function(err, rows){ 
     if(err) throw err; 
     console.log(rows); 
     console.log(JSON.stringify(rows)); 
}); 

.query(成功返回,但是我收到一个空数组,其中我的结果应该是。

[ **[]**, 
OkPacket { 
fieldCount: 0, 
affectedRows: 0, 
insertId: 0, 
serverStatus: 34, 
warningCount: 0, 
message: '', 
protocol41: true, 
changedRows: 0 } ] 
Data : [[],{"fieldCount":0,"affectedRows":0,"insertId":0,"serverStatus":34,"warningCount":0,"message":"","protocol41":true,"changedRows":0}] 

所以我也不知所措。它可以与MySQL进行版本问题反对节点版本。

+0

不是调用存储过程,而是尝试发出普通的旧SELECT语句?这可能有助于确保您的JavaScript代码正常工作。 – andrunix

+0

今天晚些时候我将能够测试这个理论。我们会看看它是否有帮助。 – ElementCR

+1

看看这篇文章,并使用IN/OUT参数。请注意它们在CALL语句上的语法。 https://www.sitepoint.com/using-node-mysql-javascript-client/ – andrunix

回答

1

作为每MySQL的docs

的过程是使用一个CALL语句调用(SE e节13.2.1, “CALL语法”),并且只能使用输出变量传回值。 函数可以从声明中调用,就像任何其他函数(即通过调用该函数的名称)一样,并且可以返回标量值 。

可以使用函数返回结果集或使用OUT参数返回标量值。