我无法从Groovy格式的更改日志中执行Oracle存储过程。从XML格式的更改日志执行完全相同的存储过程可以正常工作。
在这两种情况下,dbm-update
调用都成功完成,没有任何警告或错误。我能够看到DATABASECHANGELOG
表中的条目,因此Liquibase肯定认为它正在运行更改集。
但是,使用Groovy格式时,实际上并未调用存储过程。每次执行时,此存储过程都会记录日志信息(用户,时间戳等)。每次从XML格式的更改日志调用过程时都会显示日志条目,但每次从Groovy格式的更改日志调用过程时都会丢失日志条目。
使用Groovy格式更改日志时调用存储过程的正确方法是什么?
这是我的工作changelog.groovy
。请注意,为了简单起见,我删除了所有其他include语句,并且我已经注释掉了不起作用的包含的Groovy版本。
databaseChangeLog = {
include file: "schema-grants.xml"
//include file: "schema-grants.groovy"
}
这是schema-grants.xml
。请注意,为简洁起见,我删除了架构/命名空间信息。
<databaseChangeLog ...>
<changeSet id="schema-grants" author="jstricker" runAlways="true">
<sql>call meta.grants_pkg.schema_grants('PARAMETER_VAL');</sql>
<rollback/>
</changeSet>
</databaseChangeLog>
最后,这是schema-grants.groovy
:
databaseChangeLog = {
changeSet(id: "schema-grants", author: "jstricker", runAlways: "true") {
sql {
"call meta.grants_pkg.schema_grants('PARAMETER_VAL');"
}
rollback {
}
}
}