【问题标题】:MySQL/MariaDB: Can't create a procedure using the case statementMySQL/MariaDB:无法使用 case 语句创建过程
【发布时间】:2016-05-26 16:35:47
【问题描述】:

我正在为 MySQL 的 case 语句而苦苦挣扎。我想在一个过程中使用它,但我收到一个错误(#1064 - 您的 SQL 语法有错误;请查看与您的 MariaDB 服务器版本相对应的手册,以获取正确的语法,以便在第 4 行的 '' 附近使用)每次我尝试创建程序时。我使程序尽可能简单,以避免其他与案例陈述无关的错误。这是我目前正在尝试的:

drop PROCEDURE if EXISTS test;
create PROCEDURE test()
BEGIN
CASE
when true THEN INSERT INTO testtable VALUES (DEFAULT);
end case;
END

我真的不知道错在哪里。手册说语法是这样的:

CASE
    WHEN search_condition THEN statement_list
    [WHEN search_condition THEN statement_list] ...
    [ELSE statement_list] 
END CASE

我想我做的完全一样。 我希望有人能帮助我。我现在挣扎了几个小时。 顺便说一句:我正在将 XAMPP 与 PHPMyAdmin 一起使用

【问题讨论】:

  • 用错误信息补充您的问题
  • #1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取正确的语法,以便在第 4 行的 '' 附近使用

标签: mysql case mariadb procedure


【解决方案1】:

你需要改变你的分隔符,否则它不知道你的存储过程何时结束,而不是过程中的语句

如果你从控制台运行它:

drop PROCEDURE if EXISTS test;

delimiter $$

create PROCEDURE test()
BEGIN
CASE
when true THEN INSERT INTO testtable VALUES (DEFAULT);
end case;
END$$

delimiter ;

如果您在 phpmyadmin 中运行它,那么您必须使用其 GUI 指定分隔符:

【讨论】:

  • 感谢您的回答,但这并不能解决问题。现在我收到此错误:#1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 2 行的“create PROCEDURE test() BEGIN CASE when true THEN INSERT INTO testtable VAL”附近使用正确的语法
  • @triple-x-gamer 您必须在更改分隔符之前删除程序,或者在删除时使用自定义分隔符。我已经编辑了我的答案来演示。
  • @triple-x-gamer 也因为您使用的是 phpmyadmin,您可能会发现 this answer 有助于设置分隔符。它对我来说似乎工作正常,但我确实注意到它在分隔符上抛出了一些错误,尽管实际上创建了程序。
  • 天哪,非常感谢!有用!当我使用 sql 语句更改分隔符时,它也可以工作。没有必要用 GUI 改变它(至少对我来说它在没有 GUI 的情况下也能工作)。
猜你喜欢
  • 2020-01-10
  • 2013-01-07
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 2013-08-24
  • 2012-01-01
  • 1970-01-01
相关资源
最近更新 更多