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