2012-06-12 5 views
1

Использование MySQL. Как импортировать определенную пользователем функцию базы данных с одного сервера db на другой сервер db с помощью phpmyadmin?MySQL, phpmyadmin, как импортировать определенные пользователем функции

список пользовательских функций могут быть выбраны с помощью этого SQL:

select * from information_schema.routines; 

Вот моя функция, которую я хочу, чтобы перейти на другой сервер базы данных:

CREATE DEFINER=`XXX`@`%` FUNCTION `BDayDiff`(d1 DATE, d2 DATE) RETURNS int(11) 
    DETERMINISTIC 
BEGIN 
DECLARE dow1, dow2, days, wknddays INT; 
SET dow1 = DAYOFWEEK(d1); 
SET dow2 = DAYOFWEEK(d2); 
SET days = DATEDIFF(d2,d1); 
SET wknddays = 2 * FLOOR(days/7) + 
       IF(dow1 = 1 AND dow2 > 1, 1,        
        IF(dow1 = 7 AND dow2 = 1, 1,    
         IF(dow1 > 1 AND dow1 > dow2, 2,  
          IF(dow1 < 7 AND dow2 = 7, 1, 0) 
         ) 
        ) 
       ); 
RETURN FLOOR(days - wkndDays); 
END 

Но я получаю сообщение об ошибке :

Error 

SQL query: 

CREATE DEFINER = `XXX`@`%` FUNCTION `BDayDiff` (
d1 DATE, 
d2 DATE 
) RETURNS INT(11) DETERMINISTIC BEGIN DECLARE dow1, 
dow2, 
days, 
wknddays INT; 

MySQL said: Documentation 
#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 5 

ответ

1

Надеется, что это возможно в PHPMyAdmin:

  • Выполнить SHOW CREATE FUNCTION
  • Вы увидите CREATE FUNCTION заявление, выполнить его на другой сервер MySQL
  • Повторите эти шаги для каждой функции.

Обратите внимание, что функции могут иметь параметры безопасности (DEFINER, SQL SECURITY), читайте об этих параметрах в documentation (CREATE PROCEDURE and CREATE FUNCTION Syntax); если вы хотите их использовать, убедитесь, что указанные пользователи созданы на другом сервере.

SHOW CREATE FUNCTION Syntax.

+0

спасибо Devart, я создал запрос для создания функции, но как-то это бросает ошибку. Я обновил вопрос выше с ошибкой. Есть идеи? – Developer

+0

Это может быть проблема DELIMITER для старых версий phpmyadmin - http://stackoverflow.com/questions/2846516/how-to-write-a-stored-procedure-using-phpmyadmin-and-how-to-use-it- via-php – Devart

+0

Вы также можете попытаться создать процедуру с использованием расширений mysql для PHP. – Devart

5

Попробуйте это, добавив $, это работает для меня.

DELIMITER $ 

CREATE DEFINER=`XXX`@`%` FUNCTION `BDayDiff`(d1 DATE, d2 DATE) RETURNS int(11) 
    DETERMINISTIC 
BEGIN 
DECLARE dow1, dow2, days, wknddays INT; 
SET dow1 = DAYOFWEEK(d1); 
SET dow2 = DAYOFWEEK(d2); 
SET days = DATEDIFF(d2,d1); 
SET wknddays = 2 * FLOOR(days/7) + 
       IF(dow1 = 1 AND dow2 > 1, 1,        
        IF(dow1 = 7 AND dow2 = 1, 1,    
         IF(dow1 > 1 AND dow1 > dow2, 2,  
          IF(dow1 < 7 AND dow2 = 7, 1, 0) 
         ) 
        ) 
       ); 
RETURN FLOOR(days - wkndDays); 
END$ 
0
If you are using phpmyadmin interface to execute the query for function then you should follow the steps as below: 

DELIMITER $$ 

CREATE FUNCTION `BDayDiff`(d1 DATE, d2 DATE) RETURNS int(11) 
    DETERMINISTIC 
BEGIN 
DECLARE dow1, dow2, days, wknddays INT; 
SET dow1 = DAYOFWEEK(d1); 
SET dow2 = DAYOFWEEK(d2); 
SET days = DATEDIFF(d2,d1); 
SET wknddays = 2 * FLOOR(days/7) + 
       IF(dow1 = 1 AND dow2 > 1, 1,        
        IF(dow1 = 7 AND dow2 = 1, 1,    
         IF(dow1 > 1 AND dow1 > dow2, 2,  
          IF(dow1 < 7 AND dow2 = 7, 1, 0) 
         ) 
        ) 
       ); 
RETURN FLOOR(days - wkndDays); 
END $$ 

DELIMITER ; 
0

Чтобы экспортировать определяемые пользователем функции:

В PhpMyAdmin открыть БД. После этого нажмите кнопку «Экспорт». В открывшемся окне должны быть установлены флажки (если он не показан, выберите «Пользовательский - отобразить все возможные варианты»): 1) Добавить ТАБЛИЦУ DROP/VIEW/PROCEDURE/FUNCTION/EVENT; 2) Добавить CREATE PROCEDURE/FUNCTION/EVENT; Проверьте и экспортируйте его.

Просто импортируйте его в свою БД, и он отлично работает!

P.S. Вы можете увидеть эти функции в таблице Routing DB базы данных схемы, но вы не можете импортировать ее напрямую, потому что у вас нет прав, даже если вы являетесь пользователем root.

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