MariaDB / MySQL中CREATE PROCEDURE中的神秘错误

时间:2017-11-01 20:16:05

标签: mysql stored-procedures mariadb

我想在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;

4 个答案:

答案 0 :(得分: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; //

答案 1 :(得分:0)

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

答案 2 :(得分:0)

以下是指向缺少DELIMITER的线索:

  • near '' at line 3
  • 第3行包含第一个;
  • 当错误显示near ''时,解析器认为它已经在"语句结束时运行了#34;。

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

答案 3 :(得分:-1)

CREATE PROCEDURE nom_jobs_insert(IN p_name varchar(100)CHARACTER SET' utf8') IS DECLARE计数器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;