我在 Linux 上使用 MariaDB 10.24.8,遇到了这个语法错误,在过去的几个小时里一直困扰着我:
ERROR 1064 (42000) at line 7: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 6
使用此 SQL 查询来创建存储过程:
USE getranke;
DROP PROCEDURE IF EXISTS insert_scan;
-- param scan INT: Barcode Value
-- out-param result INT: 0 = registered; 1 = DB is in inventory mode
CREATE PROCEDURE insert_scan(
IN scan INT,
OUT result INT
)
BEGIN
DECLARE stateName TEXT;
SELECT Name INTO stateName
FROM StateIDs
JOIN SystemState
ON StateIDs.ID = SystemState.FK_StateIDs_ID
WHERE SystemState.ID = 1;
IF stateName = 'Inventory' THEN
SET result = 1;
ELSE
SELECT scan;
INSERT INTO Scans (FK_Drinks_barcode, when_datetime)
VALUES (scan, NOW());
SET result = 0;
END IF;
END;
让我特别恼火的是 Rust-Rover 设法毫无问题地执行这个查询,但是如果我使用 mysql/mariadb 控制台运行它,它会给我这个错误。其他前端(例如 phpmyadmin)也会出现这种情况。
如果您需要更多信息,我将非常乐意提供。谢谢。
我很确定这个问题已经被回答过很多次了,但我找不到这样的答案,所以我要写一个。
正如手册所说,
您可以使用以下
delimiter
命令来执行此操作:对于“其他前端,如 phpmyadmin”,您将使用它们各自的设置来重新定义分隔符。
让我们简化一下代码:
(我喜欢用前导来声明参数和局部变量,
_
以避免某些令人费解的错误。不,我认为它们不会发生在这种情况下。