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/

相关文章:

mysql - 错误代码 : 1845. 此操作不支持 ALGORITHM=INSTANT。尝试算法=复制/就位

PHP: Mysql ("SELECT WHERE ID NOT ")

MySQL在where子句中自动将字符串转换为整数?

SQL友元函数

mysql - 仅当该行缺少特定值时才返回该行的查询

mysql - 在 MySQL 服务器版本 8 上执行 MySQL 查询时出错

mysql-workbench - 如何将空间数据导入 mysql 8 (Mysql WorkBench 8.0)

php - 在自定义 PHP 函数中运行 SQL 准备好的语句

php - 如何从 Facebook 登录中提取电子邮件地址?

mysql - 使用不同的日期格式将 CSV 导入 MySQL