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 回滚的方式不同。
我正在尝试了解为什么在先决条件明确说明 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 回滚的方式不同。