慢慢地为我雇主的三个主要模式之一构建一个起始 changeSet xml 文件。唯一的阻碍是合并了由 liquibase 管理的相当大的 MySQL 存储过程库。
一个 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 命令在传递到服务器之前要由客户端解释器解释和执行.