2016-11-16 56 views
2

获得以下错误,而在phpMyAdmin SQL箱创建存储过程:MariaDB的程序phpmyadmin的错误

1064 - 你在你的SQL语法错误;检查 对应于您MariaDB的服务器版本正确的语法使用手动 近1行

CREATE PROCEDURE get_tree(IN id varchar) 
BEGIN 
DECLARE ref_id varchar(10); 
DECLARE userid varchar(10); 
SET userid = id; 
SET ref_id=''; 
SELECT ref_id into ref_id 
FROM user WHERE user_id=id ; 
create TEMPORARY table IF NOT EXISTS temp_table as (select * from user where 1=''); 
truncate table temp_table; 
WHILE ref_id <> '' DO 
    insert into temp_table select * from user WHERE user_id=userid; 
    SET userid = ref_id; 
    SET ref_id=''; 
    SELECT ref_id into ref_id 
    FROM user WHERE user_id=userid; 
END WHILE; 
select * from temp_table; 
END 

回答

3

问题通过添加以下分隔符为解决:

DELIMITER $$ 
CREATE PROCEDURE get_tree(IN id varchar(10)) 
BEGIN 
DECLARE ref_id varchar(10); 
DECLARE userid varchar(10); 
SET userid = id; 
SET ref_id=''; 
SELECT ref_id into ref_id 
FROM user WHERE user_id=id ; 
create TEMPORARY table IF NOT EXISTS temp_table as (select * from user where 1=''); 
truncate table temp_table; 
WHILE ref_id <> '' DO 
    insert into temp_table select * from user WHERE user_id=userid; 
    SET userid = ref_id; 
    SET ref_id=''; 
    SELECT ref_id into ref_id 
    FROM user WHERE user_id=userid; 
END WHILE; 
select * from temp_table; 


END$$ 
DELIMITER ; 
+0

的说明只是为了防止未来的读者从感到困惑。改变分隔符不会解决甚至影响问题中描述的_initial_问题;有或没有它,你仍然会在第1行得到同样的确切错误。只有在你真正修复了错误的参数后(如在这个答案中已经完成),分隔符将变得重要,如果它没有改变为非 - 分号在您的会话中较早,它自然会导致语法错误,但是在第3行显示第一个分号时会出现一个完全不同的语法错误。 – elenst

4

的问题是过程参数“)BEGIN DECLARE REF_ID VARCHAR(10)” - 你不能没有长度的varchar。它应该是

CREATE PROCEDURE get_tree(IN id varchar(10)) 
BEGIN 
... 

(或任何你想要的长度,但10似乎是一个合理的选择)。