Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка при создании Stored Function в Mysql через MyDac / 11 сообщений из 11, страница 1 из 1
07.12.2017, 09:31:54
    #39565565
Jonnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при создании Stored Function в Mysql через MyDac
Есть код создания функции в Mysql. Он работает, если его например выполнить через редактор Sqlyog для Mysql. Нет ни ошибок не предупреждений.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
DROP FUNCTION IF EXISTS `CalcDayTimeSheet`;

DELIMITER $$ 
  

CREATE  FUNCTION `CalcDayTimeSheet`(IDUser INT, TextDate VARCHAR(25)) RETURNS TIME     
BEGIN      
DECLARE NumberHours TIME;     
SET NumberHours = 0;         
SET NumberHours = (SELECT SEC_TO_TIME(IF(MIN(DateWork)=MAX(DateWork), 600, TIMESTAMPDIFF(SECOND, MIN(DateWork), MAX(DateWork)))) FROM (  
SELECT DateBegin AS DateWork          
FROM ItemsTexCards          
WHERE DATE_FORMAT(DateBegin, "%Y-%c-%e")=TextDate AND IDMade=IDUser           
UNION ALL          
SELECT DateEnd  AS DateWork           
FROM ItemsTexCards           
WHERE DATE_FORMAT(DateEnd, "%Y-%c-%e")=TextDate AND IDMade=IDUser          
) i_am_derevided_table);     
RETURN NumberHours;     
END$$  
DELIMITER ; 



Когда я этот код пытаюсь выполнить в XE8 через MyQuery, то выдает ошибку. Типа ему, что то не нравится начиная с DELIMITER $$ .
Вот ошибка
Код: pascal
1.
2.
3.
4.
5.
6.
7.
---------------------------
Debugger Exception Notification
---------------------------
Project TListCompanies.exe raised exception class EMySqlException with message '
#42000You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER $$  
 CREATE  FUNCTION `CalcDayTimeSheet`(IDUser INT, TextDate VARCHA' at line 1'.
---------------------------



Сам код

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
with MyQuery do      // DEFINER=`' + LSA.NDBLogin + '`@`%`  DM.MyStoredProc1
    try
      sql.text:='DROP FUNCTION IF EXISTS `CalcDayTimeSheet`;  ' + #13
      +' DELIMITER $$  ' + #13

   //   +' USE `' + LSA.NDBName + '`$$  '
      +' CREATE  FUNCTION `CalcDayTimeSheet`(IDUser INT, TextDate VARCHAR(25)) RETURNS TIME   '
      +'  BEGIN  '

      +'    DECLARE NumberHours TIME; '

      +'    SET NumberHours = 0; '

      +'        SET NumberHours = (SELECT SEC_TO_TIME(IF(MIN(DateWork)=MAX(DateWork), 600, TIMESTAMPDIFF(SECOND, MIN(DateWork), MAX(DateWork)))) FROM ( '
      +'        SELECT DateBegin AS DateWork  '
      +'        FROM ItemsTexCards  '
      +'        WHERE DATE_FORMAT(DateBegin, "%Y-%c-%e")=TextDate AND IDMade=IDUser   '
      +'        UNION ALL  '
      +'        SELECT DateEnd  AS DateWork   '
      +'        FROM ItemsTexCards   '
      +'        WHERE DATE_FORMAT(DateEnd, "%Y-%c-%e")=TextDate AND IDMade=IDUser  '
      +'        ) i_am_derevided_table); '

      +'    RETURN NumberHours;   ' + #13
      +'  END$$ ' + #13

      +' DELIMITER ; ';

      Execute;
    finally
      Free;
    end;



В чем может быть проблема ?
...
Рейтинг: 0 / 0
07.12.2017, 09:37:50
    #39565573
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при создании Stored Function в Mysql через MyDac
TMyScript?
...
Рейтинг: 0 / 0
07.12.2017, 09:51:16
    #39565581
Jonnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при создании Stored Function в Mysql через MyDac
wadmanTMyScript?

Никогда этой штукой не пользовался и может, что то не так делаю. Но результат такой.

Код: pascal
1.
2.
3.
4.
5.
6.
---------------------------
Debugger Exception Notification
---------------------------
Project TListCompanies.exe raised exception class EMySqlException with message '
#42000You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER' at line 3'.
---------------------------



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
 with DM.MyScript1 do      // DEFINER=`' + LSA.NDBLogin + '`@`%`  DM.MyStoredProc1
    try
      sql.text:='DROP FUNCTION IF EXISTS `CalcDayTimeSheet`;  ' + #13
      +' DELIMITER $$  ' + #13

   //   +' USE `' + LSA.NDBName + '`$$  '
      +' CREATE  FUNCTION `CalcDayTimeSheet`(IDUser INT, TextDate VARCHAR(25)) RETURNS TIME   '
      +'  BEGIN  '

      +'    DECLARE NumberHours TIME; '

      +'    SET NumberHours = 0; '

      +'        SET NumberHours = (SELECT SEC_TO_TIME(IF(MIN(DateWork)=MAX(DateWork), 600, TIMESTAMPDIFF(SECOND, MIN(DateWork), MAX(DateWork)))) FROM ( '
      +'        SELECT DateBegin AS DateWork  '
      +'        FROM ItemsTexCards  '
      +'        WHERE DATE_FORMAT(DateBegin, "%Y-%c-%e")=TextDate AND IDMade=IDUser   '
      +'        UNION ALL  '
      +'        SELECT DateEnd  AS DateWork   '
      +'        FROM ItemsTexCards   '
      +'        WHERE DATE_FORMAT(DateEnd, "%Y-%c-%e")=TextDate AND IDMade=IDUser  '
      +'        ) i_am_derevided_table); '

      +'    RETURN NumberHours;   ' + #13
      +'  END$$ ' + #13

      +' DELIMITER ; ';
      Execute;
    finally
     // Free;
    end;



У этого компанента еще есть свойство DELIMITER и оно у меня равно ";" Может его надо менять или процедуру надо переписать ?
...
Рейтинг: 0 / 0
07.12.2017, 10:16:52
    #39565598
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при создании Stored Function в Mysql через MyDac
JonnikМожет его надо менять или процедуру надо переписать ?
Попробуй указать свой delimiter и убрать из скрипта манипуляции с ним.
...
Рейтинг: 0 / 0
07.12.2017, 11:12:47
    #39565646
Jonnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при создании Stored Function в Mysql через MyDac
wadmanJonnikМожет его надо менять или процедуру надо переписать ?
Попробуй указать свой delimiter и убрать из скрипта манипуляции с ним.

Пробую так. Ошибок нет теперь. Но и функция не создается. В чем может быть проблема ?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
 with DM.MyScript1 do     
    try
      Delimiter := '$$';
      sql.text:='DROP FUNCTION IF EXISTS `CalcDayTimeSheet`;  ' + #13

      +' CREATE  FUNCTION `CalcDayTimeSheet`(IDUser INT, TextDate VARCHAR(25)) RETURNS TIME   '
      +'  BEGIN  '

      +'    DECLARE NumberHours TIME; '

      +'    SET NumberHours = 0; '

      +'        SET NumberHours = (SELECT SEC_TO_TIME(IF(MIN(DateWork)=MAX(DateWork), 600, TIMESTAMPDIFF(SECOND, MIN(DateWork), MAX(DateWork)))) FROM ( '
      +'        SELECT DateBegin AS DateWork  '
      +'        FROM ItemsTexCards  '
      +'        WHERE DATE_FORMAT(DateBegin, "%Y-%c-%e")=TextDate AND IDMade=IDUser   '
      +'        UNION ALL  '
      +'        SELECT DateEnd  AS DateWork   '
      +'        FROM ItemsTexCards   '
      +'        WHERE DATE_FORMAT(DateEnd, "%Y-%c-%e")=TextDate AND IDMade=IDUser  '
      +'        ) i_am_derevided_table); '

      +'    RETURN NumberHours;   ' + #13
      +'  END$$' + #13

      +' DELIMITER ;';

      Execute;
    finally
     // Free;
    end;
...
Рейтинг: 0 / 0
07.12.2017, 11:33:22
    #39565672
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при создании Stored Function в Mysql через MyDac
В транзакции?

П.С. Не кажется ли, что между drop и create должен быть указанный в свойствах delimiter, а не точка с запятой?
...
Рейтинг: 0 / 0
07.12.2017, 11:53:45
    #39565703
Jonnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при создании Stored Function в Mysql через MyDac
wadmanВ транзакции?

П.С. Не кажется ли, что между drop и create должен быть указанный в свойствах delimiter, а не точка с запятой?

Я тут не использую транзакцию.

Сделал так. Т.е. поставил $$ и теперь ошибка на нем

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
with DM.MyScript1 do      // DEFINER=`' + LSA.NDBLogin + '`@`%`  DM.MyStoredProc1
    try
      Delimiter := '$$';
      sql.text:='DROP FUNCTION IF EXISTS `CalcDayTimeSheet` $$' + #13

      +' CREATE  FUNCTION `CalcDayTimeSheet`(IDUser INT, TextDate VARCHAR(25)) RETURNS TIME   '
      +'  BEGIN  '

      +'    DECLARE NumberHours TIME; '

      +'    SET NumberHours = 0; '

      +'        SET NumberHours = (SELECT SEC_TO_TIME(IF(MIN(DateWork)=MAX(DateWork), 600, TIMESTAMPDIFF(SECOND, MIN(DateWork), MAX(DateWork)))) FROM ( '
      +'        SELECT DateBegin AS DateWork  '
      +'        FROM ItemsTexCards  '
      +'        WHERE DATE_FORMAT(DateBegin, "%Y-%c-%e")=TextDate AND IDMade=IDUser   '
      +'        UNION ALL  '
      +'        SELECT DateEnd  AS DateWork   '
      +'        FROM ItemsTexCards   '
      +'        WHERE DATE_FORMAT(DateEnd, "%Y-%c-%e")=TextDate AND IDMade=IDUser  '
      +'        ) i_am_derevided_table); '

      +'    RETURN NumberHours;   ' + #13
      +'  END$$' + #13

      +' DELIMITER ;';
      Execute;
    finally
     // Free;
    end;



И ошибка в третей строке теперь. В тексте это тут
Код: pascal
1.
+'  END$$' + #13

Там просто тест запроса по другому выглядит. В общем какая то жесть.

Код: pascal
1.
2.
3.
4.
5.
6.
---------------------------
Debugger Exception Notification
---------------------------
Project TListCompanies.exe raised exception class EMySqlException with message '
#42000You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER' at line 3'.
---------------------------
...
Рейтинг: 0 / 0
07.12.2017, 12:03:58
    #39565714
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при создании Stored Function в Mysql через MyDac
Дак убери из скрипта объявление разделителя... Им сам компонент управляет через своё свойство.
...
Рейтинг: 0 / 0
07.12.2017, 12:27:50
    #39565741
Jonnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при создании Stored Function в Mysql через MyDac
wadmanДак убери из скрипта объявление разделителя... Им сам компонент управляет через своё свойство.

Делал я уже по разному. Ему все не нравится (((
Эту функцию можно записать без DELIMITER ? Если можно, то как?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
DROP FUNCTION IF EXISTS `CalcDayTimeSheet`;

DELIMITER $$ 
  

CREATE  FUNCTION `CalcDayTimeSheet`(IDUser INT, TextDate VARCHAR(25)) RETURNS TIME     
BEGIN      
DECLARE NumberHours TIME;     
SET NumberHours = 0;         
SET NumberHours = (SELECT SEC_TO_TIME(IF(MIN(DateWork)=MAX(DateWork), 600, TIMESTAMPDIFF(SECOND, MIN(DateWork), MAX(DateWork)))) FROM (  
SELECT DateBegin AS DateWork          
FROM ItemsTexCards          
WHERE DATE_FORMAT(DateBegin, "%Y-%c-%e")=TextDate AND IDMade=IDUser           
UNION ALL          
SELECT DateEnd  AS DateWork           
FROM ItemsTexCards           
WHERE DATE_FORMAT(DateEnd, "%Y-%c-%e")=TextDate AND IDMade=IDUser          
) i_am_derevided_table);     
RETURN NumberHours;     
END$$  
DELIMITER ; 
...
Рейтинг: 0 / 0
07.12.2017, 12:45:41
    #39565763
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при создании Stored Function в Mysql через MyDac
JonnikЕсли можно, то как?
Убрать из скрипта все слова/конструкции DELIMITER .
...
Рейтинг: 0 / 0
07.12.2017, 13:01:41
    #39565784
Jonnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при создании Stored Function в Mysql через MyDac
wadmanJonnikЕсли можно, то как?
Убрать из скрипта все слова/конструкции DELIMITER .

В общем DELIMITER по умолчанию оставил. Убрал все слова DELIMITER из запроса и символы $$
В программе все это работает, а в Sqlyog такой запрос не работает. Поэтому я не мог найти правильный вариант.
Большое спасибо.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка при создании Stored Function в Mysql через MyDac / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]