雇用主の 3 つのプライマリ スキーマのうちの 1 つのスターター changeSet xml ファイルをゆっくりと作成しています。唯一の障害は、liquibase によって管理される MySQL ストアド プロシージャのかなり大きなライブラリを組み込んだことです。
1 つの sproc を処理するのが少し面倒でした: 最初のいくつかのステートメントは次のようになります。
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
use ステートメントは非生産的であるとして切り取りましたが、実際の問題は、次の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 フォーラムのスレッドがここで問題をもう少し詳しく説明していることがわかりました。
とにかく、現在 Liquibase に存在する sproc スクリプトを使用できますか、それとも数百のストアド プロシージャを書き直す必要がありますか?
createProcedure、sqlFile、および sql liquibase タグを試してみましたが、うまくいきませんでした。中心的な問題は、set、delimiter、および同様の SQL コマンドが、サーバーに配信される前にクライアント側のインタープリターによって解釈および処理されることであると考えているからです。 .