2015-12-22 75 views
3

SQL查询:文档MySQL的过程语言

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服务器版本的正确语法使用 附近'= SELECT MAX(rht)FROM树; INSERT INTO树(tree_idnamelabel,`” 4行

我怎样才能解决这个问题?

+0

什么是$最大 – Strawberry

+0

$最大是一个变量,我存储的最大值“rht” – sumit

+0

你怎么知道? – Strawberry

回答

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关键字之前像上面的查询,之后启动身体(开始)。使用v_max代替$最大这里。

还承诺使用的关键字,而不是评论。

+0

感谢vipin这个解决方案 – sumit

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(); 

我希望这个人能帮助你,欢呼!