繁体   English   中英

运行存储过程时出错 ERROR 1064 (42000)

[英]getting an error while running a stored procedure ERROR 1064 (42000)

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

错误:

第 1 行的错误 1064 (42000):您的 SQL 语法有错误; 检查与您的 MySQL 服务器版本对应的手册,了解在第 1 行的“PRODECURE prc_inv_amounts @inv_num DECIMAL BEGIN UPDATE INVOICE SET INV_SUBTOTAL”附近使用的正确语法

看起来您已经将一些 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 ,输入参数必须在括号中定义为创建语句的一部分https://dev .mysql.com/doc/refman/8.0/en/create-procedure.html , user defined an declared variables are not the same How to declar a variable in MySQL? , 每条语句必须以;结尾 (分号)

我还移动了小计计算。

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

错误:

第 1 行的 ERROR 1064 (42000):您的 SQL 语法有错误; 检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行的“PRODECURE prc_inv_amounts @inv_num DECIMAL BEGIN UPDATE INVOICE SET INV_SUBTOTAL”附近使用的正确语法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM