在Express / Node中工作,尝试执行存储过程时收到错误:
ER_PARSE_ERROR:您的SQL语法有错误。查看与您的MySQL服务器版本相对应的手册,以获取在'?,?,?,?,?附近使用正确的语法)
这没有什么意义,因为我在项目中有4个左右的其他函数在1-3个参数之间执行相同的操作,并且它们的行为均符合预期,并且不会引发任何错误。
尝试运行存储过程时。
函数调用:
paymentLines.forEach(async payment => {
var qbid = payment.Id var date = payment.TxnDate var amount = payment.TotalAmt var invId = payment.Line[0].LinkedTxn[0].TxnId var acc = payment.DepositToAccountRef.value
console.log(qbid, date, amount, invId)
await service.updatePaymentDb(db, 'call qbpayments(?,?,?,?,?)', [qbid, date, amount, invId, acc]) .then(console.log("Payment updated")) .catch(() => res.sendStatus(500))
})
实际功能(在单独的文件中,已导入):
updatePaymentDb: function (db, proc, qid, date, amount, invId, acc) { return new Promise(function(resolve, reject) { db.query(proc, invId, date, amount, acc, qid, (error, res) => { if (error) { reject(error); } else resolve(res); }) }) }
该过程在工作台中运行时可以正常运行:
CREATE DEFINER=rjeadmin
@%
PROCEDURE qbpayments
(in invId int, in paydate Date, in amount decimal, in acc int, in qbid int) BEGIN
set @invoicenumber = (select Invoice Number
from tbldebtorinvoices where qbid = invId); set @currId = (select curr_id from tbldebtorinvoices where qbid = invId); set @entityId = (select EntityID from tbldebtorinvoices where qbid = invId);
insert into tbldebtorinvoicepayments(InvoiceNumber, PaymentDate, PaymentAmount, curr_id, BankAccountID, EntityID, debtorPaymentExRate, qbid) values(@invoicenumber, paydate, amount, @currId, @entityId, acc, 1, qbid);
select max(Invoice Number
) from tbldebtorinvoices;
END
我最初的想法是,它可能与异步/等待有关,但是无论如何它都会失败。另外,如果删除“?”,该函数将抛出预期的“期望的x参数”,因此它将识别过程本身。一些任意的参数限制?
问题来源于stack overflow
服务层中的定义需要7个参数。
updatePaymentDb: function (db, proc, qid, date, amount, invId, acc)
在实施过程中,您将其称为:
await service.updatePaymentDb(db, 'call qbpayments(?,?,?,?,?)', [qbid, date, amount, invId, acc])
因为[qbid, date, amount, invId, acc]是数组,所以您传递了3个参数。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。