Написал кучу хранимых процедур и теперь пытаюсь перенести их на хост.
Процедуры такого вида:
DROP PROCEDURE IF EXISTS `updateTeacher`;
DELIMITER $$
/*!50003 SET @TEMP_SQL_MODE=@@SQL_MODE, SQL_MODE='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER' */ $$
CREATE PROCEDURE `updateTeacher`(IN i_name VARCHAR(255), IN i_position VARCHAR(255), IN i_id INT)
BEGIN
UPDATE users SET `name`=i_name, `position`=i_position WHERE `id`=i_id;
END $$
Mysql Administrator их хорошо грузит (это им сделанный бэкап).
А вот phpmyadmin ругается и не хочет их грузить.
Разного рода ухищрения тоже не помогают (например, загнать процедуру в пхп и запустить с помощью mysql_query).
Если кто то занимался загрузкой хранимых процедур на хост, подскажите, пожалуйста, как Вы это делали... Мб дамп надо чем-нибудь другим загружать?
Спустя 21 минута, 3 секунды (11.05.2009 - 13:44) vasa_c написал(а):
Как ругается? Нах, нах, говорит?
Или описывает ошибку?
Или описывает ошибку?
Спустя 34 минуты, 50 секунд (11.05.2009 - 14:19) CaXaP написал(а):
SQL |
Ошибка SQL-запрос: CREATE PROCEDURE `updateTeacher` ( IN i_name VARCHAR( 255 ) , IN i_position VARCHAR( 255 ) , IN i_id INT ) BEGIN UPDATE users SET `name` = i_name, `position` = i_position WHERE `id` = i_id; 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 '$$' at line 4 |
Это, очевидно, из за непонимания phpmyadmin DELIMETERа.
Убрал их, получил такой запрос:
SQL |
DROP PROCEDURE IF EXISTS `updateTeacher`; CREATE PROCEDURE `updateTeacher`(IN i_name VARCHAR(255), IN i_position VARCHAR(255), IN i_id INT) BEGIN UPDATE users SET `name`=i_name, `position`=i_position WHERE `id`=i_id; END |
На нём вылетает лаконичное:
SQL |
Ошибка SQL-запрос: CREATE PROCEDURE `updateTeacher` ( IN i_name VARCHAR( 255 ) , IN i_position VARCHAR( 255 ) , IN i_id INT ) BEGIN UPDATE users SET `name` = i_name, `position` = i_position WHERE `id` = i_id; Ответ 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 '' at line 3 |
Спустя 21 минута, 18 секунд (11.05.2009 - 14:40) vasa_c написал(а):
phpmyadmin видимо разбивает по ";" дамп на отдельные запросы, а у вас ";" внутри процедуры.
В форме где выполняется дамп, есть поле "Разделитель". Если заменить там точку с запятой на другое что-нибудь, последний запрос выполняется.
В форме где выполняется дамп, есть поле "Разделитель". Если заменить там точку с запятой на другое что-нибудь, последний запрос выполняется.
Спустя 2 минуты, 40 секунд (11.05.2009 - 14:43) CaXaP написал(а):
Методом тыка подобрал хост БД моего хостера и смог зайти туда через Mysql Administrator.
Им дамп успешно был загружен без ошибок.
Так что проблема решена, извините за беспокойство
И, если у кого то ещё не будет получаться загружать хранимые процедуры через phpmyadmin, попробуйте mysql administrator - с фичами mysql 5.0 (в частности хранимки) он работает куда лучше...
2vasa_c
Спасибо, попробую. Всё же уметь грузить хранимки через phpmyadmin тоже надо уметь - не всегда получается удалённо к БД подключиться...
Им дамп успешно был загружен без ошибок.
Так что проблема решена, извините за беспокойство
И, если у кого то ещё не будет получаться загружать хранимые процедуры через phpmyadmin, попробуйте mysql administrator - с фичами mysql 5.0 (в частности хранимки) он работает куда лучше...
2vasa_c
Спасибо, попробую. Всё же уметь грузить хранимки через phpmyadmin тоже надо уметь - не всегда получается удалённо к БД подключиться...
_____________