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

时间:2020-11-03 20:56:17

标签: mysql sql stored-procedures

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语法有错误;在第1行的“ PRODECURE prc_inv_amounts @inv_num DECIMAL BEGIN UPDATE INVOICE SET INV_SUBTOTAL”附近使用与您的MySQL服务器版本相对应的手册以获取正确的语法

2 个答案:

答案 0 :(得分:0)

似乎您已获取一些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的一部分放在方括号中定义,用户定义的声明变量不相同How to declare a variable in MySQL?,每个语句必须以;终止(半冒号)

我也移动了小计。

答案 1 :(得分:-1)

您错过了一些争论。这样做:

CREATE PRODECURE prc_inv_amounts
(
@inv_num DECIMAL
@<other things you want>
)
AS
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