ibatis и разделитель в функциях mysql

Я попытался использовать следующий пример из Big DBA Head в сценарии миграции ibatis.

delimiter //
drop function if exists true_function //
create function true_function(p_param int) returns int
  deterministic
  sql security invoker
  return true
//

drop function if exists get_next_value//
create function get_next_value(p_name varchar(30)) returns int
  deterministic
  sql security invoker
begin  
  declare current_val integer;

  update mysql.sequences 
    set value = value + 1
    where name = p_name 
      and true_function((@current_val := mysql.sequences.value) is not null);

  return @current_val;
end//
delimiter ;

Но ибатис выдает эту ошибку:

...Ошибка выполнения: разделитель // удалить функцию, если она существует get_next_value_test // создать функцию get_next_value_test(p_name varchar(30)) возвращает int детерминированный вызов безопасности sql begin
declare current_val integer . Причина: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с разделителем //...

Я уже пытался установить allowMultiQueries и send_full_script, но безуспешно. Есть ли у вас какие-либо идеи, чтобы этот скрипт был выполнен?

Спасибо, Т.


person ownking    schedule 30.01.2013    source источник
comment
Ошибка связана с функцией get_next_value_test, но я не думаю, что в опубликованном вами коде есть эта функция.   -  person thepiyush13    schedule 10.12.2015


Ответы (1)


Я столкнулся с той же проблемой...

Следующий сайт, кажется, дает ответ на эту проблему.

https://github.com/mybatis/migrations/issues/49

Конечно, он использует MyBatis вместо iBatis, но это может быть хорошим шагом, учитывая, что iBatis «на пенсии».

Основной ответ на замену

delimiter //

с участием

-- @DELIMITER //

а затем заменить

delimiter ;

с участием

-- @DELIMITER ;
person anon    schedule 28.03.2017