2015-12-22 3 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 trees; INSERT INTO деревьев (tree_id, name, label, `» в строке 4

как я могу решить эту проблему?

+0

И что такое $ max – Strawberry

+0

$ max - это переменная, в которой я храню максимальное значение «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

После комментария я сделал в вашем вопросе ..

..you может попробовать этот один, приятель:

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

Надеюсь, это поможет вам, ура!

Смежные вопросы