运行存储过程时出错 ERROR 1064 (42000)
Posted
技术标签:
【中文标题】运行存储过程时出错 ERROR 1064 (42000)【英文标题】:getting an error while running a stored procedure ERROR 1064 (42000) 【发布时间】:2020-11-03 20:56:17 【问题描述】:CREATE PRODECURE prc_inv_amounts
@inv_num DECIMAL
BEGIN
UPDATE INVOICE SET
INV_SUBTOTAL = (SELECT SUM(LINE_TOTAL) FROM LINE WHERE INV_NUMBER = @inv_num),
INV_TAX = INV_SUBTOTAL * 0.8,
INV_TOTAL = INV_SUBTOTAL + INV_TAX
WHERE INV_NUMBER = @inv_num
END
错误:
ERROR 1064 (42000) at line 1:您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以在第 1 行的“PRODECURE prc_inv_amounts @inv_num DECIMAL BEGIN UPDATE INVOICE SET INV_SUBTOTAL”附近使用正确的语法
【问题讨论】:
您是否检查过它在使用CREATE PROCEDURE
时是否有效(注意拼写的差异!)?
80% 的税似乎过高。
【参考方案1】:
看起来你已经获取了一些 sqlserver 代码并将其转储到 mysql 中。不幸的是,sqlserver 和 mysql 在 SP 语法和变量声明上有很大的不同。
翻译成mysql的代码是
DELIMITER $$
CREATE PROcedURE prc_inv_amounts(inv_num int)
BEGIN
declare vinv_subtotal decimal(10,2);
SELECT SUM(LINE_TOTAL) into vinv_subtotal FROM LINE WHERE INV_NUMBER = inv_num;
UPDATE INVOICE SET
INV_SUBTOTAL = vinv_subtotal,
INV_TAX = vINV_SUBTOTAL * 0.8,
INV_TOTAL = vINV_SUBTOTAL + (vINV_SUBTOTAL * 0.8)
WHERE INV_NUMBER = inv_num;
END $$
delimiter ;
注意使用分隔符https://dev.mysql.com/doc/refman/8.0/en/stored-programs-defining.html,输入参数必须定义在括号中作为create语句的一部分https://dev.mysql.com/doc/refman/8.0/en/create-procedure.html,用户定义的声明变量不一样How to declare a variable in MySQL?,每个语句必须以; (分号)
我还移动了小计计算。
【讨论】:
你确定这行得通吗?PRODECURE
在我看来仍然不对以上是关于运行存储过程时出错 ERROR 1064 (42000)的主要内容,如果未能解决你的问题,请参考以下文章
在MySQL中尝试Forward Engineering时出错1064