2 Stimmen

Gibt es einen Workaround für JDBC mit Liquibase und MySQL-Sitzungsvariablen und clientseitigen SQL-Anweisungen?

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X