从Groovy格式的Liquibase更改日志调用Oracle存储过程的正确方法是什么?

时间:2014-08-05 22:11:43

标签: oracle grails groovy liquibase

我无法从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 {
        }
    }
}

0 个答案:

没有答案