Stored procedures mariadb程序phpmyadmin错误

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似乎是一个合理的选择。通过添加以下分隔符解决了此问题:

在PHPmyadmin sql框中创建存储过程时出现以下错误:

1064-您的SQL语法有错误;检查手册 对应于要使用的正确语法的MariaDB服务器版本 在第1行“BEGIN DECLARE ref_id varchar10”附近


问题在于过程参数-如果没有长度,则不能使用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 ;