2017-02-16 90 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參數返回標量值。