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
,name
,label
,`'在第4行
我该如何解决这个问题?
答案 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();
我希望这个可以帮助你,欢呼!