我正在尝试在 db-fiddle.com ( https://www.db-fiddle.com/f/qMPGptFmKSNMJartC8yMfD/1 ) 上创建一个存储过程,但我无法确定如何处理我的 DELIMITER 语句。
我已经在 Schema 端构建了表和存储过程代码,我正在尝试从 Query 端调用存储过程。
DELIMITER //
CREATE PROCEDURE conservation_count (IN con INT)
BEGIN
DECLARE ytotal INT;
SET ytotal := 0;
SET ytotal := (SELECT COUNT(*) FROM Species, Animals
WHERE Species.ID = Animals.species
AND Species.ConservationStatus = con);
SELECT ytotal;
INSERT INTO conservation_ct VALUES (ytotal);
END //
DELIMITER;
这是 db-fiddle 发回的模式错误:
Schema Error: Error: ER_PARSE_ERROR: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near '// DELIMITER' at line 10
最佳答案
所以经过更多测试后,发生了两件事:
- 我的最后一个 DELIMITER 需要在 DELIMITER 和 ; 之间留一个空格- 这可能导致了 DELIMITER 错误
DB-Fiddle 不喜欢我的存储过程。当我取出内部变量并简化它时,它完美地工作:
DELIMITER // CREATE PROCEDURE conservation_count (IN var1 INT) BEGIN SELECT COUNT(*) FROM Species, Animals WHERE Species.ID = Animals.species AND Species.ConservationStatus = var1 ; END // DELIMITER ;
关于mysql - 在 DB-Fiddle (MySQL 8.0) 中使用定界符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55314816/