【问题标题】:Mysterious error in CREATE PROCEDURE in MariaDB/MySQLMariaDB/MySQL 中的 CREATE PROCEDURE 出现神秘错误
【发布时间】:2018-04-14 05:59:30
【问题描述】:

我尝试在 MariaDB 10.2 中创建一个简单的过程,但遇到了关于变量定义的问题。

我收到 (conn:107) 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,了解在我声明变量时在第 3 行消息附近使用的正确语法。

我阅读了 MariaDB 文档,它说一个变量是这样定义的 DECLARE var_name [, var_name] ... type [DEFAULT value]

我哪里错了?我来自 Oracle SQL,并且为我连接了一些 sintax。

我使用 Eclipse 和 MariaDB JDBC 来连接 SQL。

CREATE PROCEDURE nom_jobs_insert(IN p_name varchar(100) CHARACTER SET 'utf8')
BEGIN
    DECLARE counter INT DEFAULT 0;

    SELECT count(*) INTO counter
    FROM nom_jobs
    WHERE lower(name) = lower(p_name)

    IF counter = 1 THEN
        INSERT INTO nom_jobs(name) VALUES (p_name);
    END IF;
END;

【问题讨论】:

  • 我无法重现该问题,请参阅dbfiddle

标签: mysql stored-procedures mariadb


【解决方案1】:

我找到了解决办法。

在 MariaDB 中,您必须在创建过程之前定义一个 分隔符,并且您需要标记过程代码的完成位置。

DELIMITER //
CREATE PROCEDURE nom_jobs_insert(IN p_name varchar(100) CHARACTER SET 'utf8')
BEGIN
    DECLARE counter INT DEFAULT 0;

    SELECT count(*) INTO counter
    FROM nom_jobs
    WHERE lower(name) = lower(p_name);

    IF counter = 1 THEN
        INSERT INTO nom_jobs(name) VALUES (p_name);
    END IF;
END; //

【讨论】:

    【解决方案2】:

    您的错误不在DECLARE 表达式中,请在SELECT 语句后添加;

    【讨论】:

    • 它不起作用。我在 MySQL Workbench 中尝试过,它在声明语句的“0”处告诉我它缺少分号,即使它是“0”之后的分号...
    【解决方案3】:

    以下是指向失踪DELIMITER的线索:

    • near '' at line 3
    • 第 3 行包含第一个 ;
    • 当错误显示为near '' 时,解析器认为它已超出“语句”的末尾。

    把它们放在一起——它认为有一个以; 结尾的三行语句。但是CREATE PROCEDURE 应该比这更长。

    【讨论】:

      【解决方案4】:
      CREATE PROCEDURE nom_jobs_insert(IN p_name varchar(100) CHARACTER SET 'utf8')
      IS
      DECLARE counter INTEGER DEFAULT 0;
      BEGIN
          
      
          SELECT count(*) INTO counter
          FROM nom_jobs
          WHERE lower(name) = lower(p_name)
      
          IF counter = 1 THEN
              INSERT INTO nom_jobs(name) VALUES (p_name);
          END IF;
      END;
      

      【讨论】:

      • 它显示另一个错误:“...检查与您的 MariaDB 服务器版本相对应的手册,以了解在 'IS' 附近使用的正确语法”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      • 2020-04-12
      相关资源
      最近更新 更多