Stored procedures mariadb程序phpmyadmin错误
在PHPmyadmin sql框中创建存储过程时出现以下错误: 1064-您的SQL语法有错误;检查手册 对应于要使用的正确语法的MariaDB服务器版本 在第1行“BEGIN DECLARE ref_id varchar10”附近Stored procedures mariadb程序phpmyadmin错误,stored-procedures,phpmyadmin,mariadb,Stored Procedures,Phpmyadmin,Mariadb,在PHPmyadmin sql框中创建存储过程时出现以下错误: 1064-您的SQL语法有错误;检查手册 对应于要使用的正确语法的MariaDB服务器版本 在第1行“BEGIN DECLARE ref_id varchar10”附近 问题在于过程参数-如果没有长度,则不能使用varchar。应该是 CREATE PROCEDURE get_tree(IN id varchar(10)) BEGIN ... 或者您想要的任何长度,但10似乎是一个合理的选择。通过添加以下分隔符解决了此问题:
问题在于过程参数-如果没有长度,则不能使用varchar。应该是
CREATE PROCEDURE get_tree(IN id varchar(10))
BEGIN
...
或者您想要的任何长度,但10似乎是一个合理的选择。通过添加以下分隔符解决了此问题:
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 ;
为了防止将来的读者感到困惑而写的便条。更改分隔符无论如何都不会解决甚至影响问题中描述的初始问题;不管有没有它,您仍然会在第1行得到相同的精确错误。只有在您实际修复了错误的参数(正如在本答案中所做的那样)之后,分隔符才会变得重要,如果在会话的前面没有将其更改为非分号,那么它自然会导致语法错误,但在第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 ;