Ich baue langsam eine erste changeSet xml-Datei für eines der drei Hauptschemata meines Arbeitgebers auf. Der einzige Stolperstein war die Einbindung der umfangreichen Bibliothek von MySQL Stored Procedures, die von liquibase verwaltet werden müssen.
Ein Sprok war etwas mühsam zu handhaben: Die ersten paar Anweisungen lauten
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
Ich habe die Anweisung zur Verwendung herausgeschnitten, da sie kontraproduktiv ist, aber das eigentliche Problem ist die set @@session.sql_mode
Anweisung, die eine Ausnahme verursacht wie
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 ...
Und dann die delimiter
Erklärung ist ein weiterer Stolperstein.
Bei meinen Nachforschungen fand ich diesen abgelehnten MySQL-Fehlerbericht aquí und diesen MySQL-Forenthread, der das Problem etwas ausführlicher behandelt aquí .
Gibt es eine Möglichkeit, die Sproc-Skripte zu verwenden, die derzeit mit Liquibase existieren, oder müsste ich mehrere hundert gespeicherte Prozeduren neu schreiben?
Ich habe versucht, createProcedure, sqlFile und sql liquibase Tags ohne viel Glück, wie ich denke, das Kernproblem ist, dass Set, Delimiter und ähnliche SQL-Befehle sollen interpretiert werden und auf durch die Client-Seite-Interpreter vor der Übermittlung an den Server gehandelt.