Постепенно создайте начальный XML-файл changeSet для одной из трех основных схем моего работодателя. Единственный ограничитель показа включал в себя значительную библиотеку хранимых процедур MySQL, которые будут управляться liquibase.
С одним спроком пришлось столкнуться с болью: первые несколько утверждений выглядят как
use TargetSchema;
select "-- explanatory inline comment thats actually useful --" into vDummy;
set @@session.sql_mode='TRADITIONAL' ;
drop procedure if exists adm_delete_stats ;
delimiter $$
create procedure adm_delete_stats(
...rest of sproc
Я исключил оператор использования из-за его непродуктивности, но настоящей проблемой является оператор set @@session.sql_mode
, который вызывает исключение, подобное
liquibase.exception.MigrationFailedException: Migration failed for change set ./foobarSchema/sprocs/adm_delete_stats.xml::1293560556-151::dward_autogen dward:
Reason: liquibase.exception.DatabaseException: Error executing SQL ...
И тогда оператор delimiter
является еще одним камнем преткновения.
Проводя исследование трудолюбия, я обнаружил этот отклоненный отчет об ошибке MySQL здесь и эту ветку форума MySQL, которая немного углубляется в проблему здесь .
Могу ли я в любом случае использовать сценарии sproc, которые в настоящее время существуют в Liquibase, или мне придется переписать несколько сотен хранимых процедур?
Я попробовал теги createProcedure, sqlFile и sql liquibase без особой удачи, так как думаю, что основная проблема заключается в том, что set, delimiter и подобные команды SQL предназначены для интерпретации и обработки интерпретатором на стороне клиента перед доставкой на сервер.