2015-12-22 2 views
-2

SQL запросов:MySQL Prosedural Язык 1

CREATE PROCEDURE tree_add_node(IN id int(11), IN name varchar(50), IN label varchar(50)) 
BEGIN 
DECLARE lft_value int(11), rht_value int(11), lvl_value int(11); 
START TRANSACTION; 
SELECT `lft` INTO lft_value FROM trees WHERE `tree_id`=id; 
SELECT `rht` INTO rht_value FROM trees WHERE `tree_id`=id; 
SELECT `lvl` INTO lvl_value FROM trees WHERE `tree_id`=id; 
UPDATE `trees` SET `tree_id`=`tree_id` +1,`description`='null',`lft`=`lft`+2,`rht`=`rht`+2 WHERE `tree_id`>= id; 
INSERT INTO `trees`(`tree_id`, `name`, `label`, `description`, `lft`, `rht`, `lvl`) VALUES (id,'name','label',NULL,lft_value,rht_value,lvl_value) 
COMMIT; 
END; 

MySQL сказал:

#1064 - You have an error in your SQL syntax; check the manual that 
corresponds to your MySQL server version for the right syntax to use 
near ' rht_value int(11), lvl_value int(11); START TRANSACTION; SELECT 
`lft` INTO lf' at line 3 
+2

Посмотрите на свой код правильно. Это синтаксическая ошибка. И просто скопируйте вставку кода без каких-либо объяснений, которые вам вообще не помогут. –

+0

если я могу найти свою ошибку, то я не был опубликован –

+0

http://dev.mysql.com/doc/refman/5.7/en/declare-local-variable.html – Shadow

ответ

0

Есть некоторые ошибки в вашей процедуре

1) вы объявляете 3 переменные и определить тип данных для всех в один объявить утверждение, которое является ошибкой.
[золь] определяют один тип данных к одному Инструкция Declare

Use this :- DECLARE lft_value , rht_value , lvl_value int(11); 

2) Forget точка с запятой после вставки запроса

[sol] INSERT INTO `trees`(`tree_id`, `name`, `label`, `description`, `lft`, `rht`, `lvl`) VALUES (id,'name','label',NULL,lft_value,rht_value,lvl_value); 

CREATE PROCEDURE tree_add_node(IN id int(11), IN name varchar(50), IN label varchar(50)) 
BEGIN 
DECLARE lft_value , rht_value , lvl_value int(11); 
START TRANSACTION; 
SELECT `lft` INTO lft_value FROM trees WHERE `tree_id`=id; 
SELECT `rht` INTO rht_value FROM trees WHERE `tree_id`=id; 
SELECT `lvl` INTO lvl_value FROM trees WHERE `tree_id`=id; 
UPDATE `trees` SET `tree_id`=`tree_id` +1,`description`='null',`lft`=`lft`+2,`rht`=`rht`+2 WHERE `tree_id`>= id; 
INSERT INTO `trees`(`tree_id`, `name`, `label`, `description`, `lft`, `rht`, `lvl`) VALUES (id,'name','label',NULL,lft_value,rht_value,lvl_value); 
COMMIT; 
END; 
+0

спасибо vipin, но 0 строк, затронутых этой процедурой. –

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