2015-12-22 18 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(); 

我希望這個人能幫助你,歡呼!