MySQL程序语言

时间:2015-12-22 07:04:55

标签: mysql

SQL查询:文档

CREATE PROCEDURE tree_add_root()
BEGIN
START TRANSACTION;
$max = SELECT MAX(`rht`) FROM trees;
INSERT INTO trees(`tree_id`, `name`, `label`, `description`, `lft`, `rht`, `lvl`) VALUES(1, 'Index', 'Index', '', 1,$max+1 , 0);
COMMENT;
END;

MySQL说:文档

  

1064 - 您的SQL语法出错;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   near' = SELECT MAX(rht)FROM trees;插入树(tree_id,   namelabel,`'在第4行

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

Use This

CREATE PROCEDURE tree_add_root()
BEGIN
DECLARE v_max int(11);
START TRANSACTION;
SELECT MAX(`rht`) into v_max FROM trees;
INSERT INTO trees(`tree_id`, `name`, `label`, `description`, `lft`, `rht`, `lvl`) VALUES(1, 'Index', 'Index', '', 1,v_max+1 , 0);
COMMIT;
END;

在MySQL程序中使用任何变量之前,需要首先使用DECLARE关键字声明,如上面的查询,启动主体后(BEGIN)。在这里使用v_max而不是$ max。

还使用COMMIT关键字代替评论。

答案 1 :(得分:1)

根据我在你的问题中提出的评论......

..你可以尝试这个,伙计:

DROP PROCEDURE IF EXISTS `tree_add_root`;
DELIMITER //
CREATE PROCEDURE `tree_add_root` ()
BEGIN
    START TRANSACTION;      
    SET @max = (SELECT MAX(`rht`) FROM trees);      
    INSERT INTO trees (`tree_id`, `name`, `label`, `description`, `lft`, `rht`, `lvl`)
    VALUES (1, 'Index', 'Index', '', 1, (@max + 1), 0);     
    COMMIT;
END//
DELIMITER ;

因此,无论何时调用该函数,您只需执行以下操作:

CALL tree_add_root();

我希望这个可以帮助你,欢呼!