mysql - 在 DB-Fiddle (MySQL 8.0) 中使用定界符

标签 mysql sql mysql-8.0

我正在尝试在 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

最佳答案

所以经过更多测试后,发生了两件事:

  1. 我的最后一个 DELIMITER 需要在 DELIMITER 和 ; 之间留一个空格- 这可能导致了 DELIMITER 错误
  2. 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/

相关文章:

c# - MySQL 的非 GPL ADO.NET 提供程序?

java - 是否有 JSON_CONTAINS 谓词的 QueryDSL 表示?

mysql - MySQL 触发器可能会静默失败吗?

c# - 返回所有包含特定值的列名

mysql - MySQL中使用窗口函数的移动平均线

PHP OOP 分页

MySQL MATCH() AGAINST() 与 REGEXP 匹配整个单词

mysql - 如何在 MySQL 中使用带有 Group by 的 Set?

sql - 如何在With Query中完成多个联接?

sql - 获取一年中的第一个和最后一个日历日