Liquibase dbms mssql 前提条件不适用于 Oracle

Liquibase dbms mssql precondition does not work on Oracle

我正在尝试了解为什么在先决条件明确说明 mssql 的情况下将此更改集应用到 Oracle 数据库中

这是一个简单的更改集。将列 CategoryType 更新为 UserTable 的 AppServiceUser,其中它是 '' 并在回滚中将其放回 '' 所以它在回滚中失败,因为回滚 SQL 不应该在 Oracle 中工作。这就是我如何知道它在 Oracle 中的 运行。

<changeSet id="ChangeSet-1" author="Coder" failOnError="false">
        <preConditions
                onFailMessage="Failed Failed"
                onFail="MARK_RAN">
            <dbms type="mssql"/>
            <ext:columnIsNotNullable tableName="UserTable" columnName="CategoryType"/>
            <sqlCheck expectedResult="1">SELECT CASE WHEN EXISTS (SELECT * FROM UserTable WHERE CategoryType = '') THEN 1 ELSE 0 END</sqlCheck>
        </preConditions>
        <comment> Insert 'AppServiceUser' default value to UserTable.CategoryType</comment>
        <sql>UPDATE UserTable SET CategoryType = 'AppServiceUser' WHERE CategoryType = ''</sql>
        <rollback>
            <sql>UPDATE UserTable SET CategoryType = ''</sql>
        </rollback>
    </changeSet>

我的问题是

1- 当此更改集针对 Oracle 运行 和

时,为什么先决条件 dbms=mssql 不起作用

2-把这个放在前置条件和直接放在变更集中有什么区别。 喜欢

<changeSet id="ChangeSet-1" author="Coder" failOnError="false" dbms="mssql">

经过一些测试,当您将其作为属性添加到更改集本身时,

<changeSet id="ChangeSet-1" author="Coder" failOnError="false" dbms="mssql">

它被完全跳过并且没有列在数据库变更日志中。

如果它被添加为先决条件然后(在我们上面的例子中)它执行但在 EXECTYPE 中它放置 MARK_RAN 而不是执行,因此在我们的例子中回滚是 运行甲骨文并没有成功。 (MARK_RAN 可能是由于先决条件中的任何原因)

我认为回滚应该有一个 dbms 属性,因为有时相似的 SQL 回滚的方式不同。