sql - 一个 liquibase 变更集中的 2 个先决条件
问题描述
是否可以为变更集的单个元素创建两个先决条件?就像如果更改日志文件在 SQL Server 数据库中运行,则生成一列,如果更改日志文件在 Oracle 数据库中运行,则生成另一列。例如,以这样的方式:
<changeSet author="Me" id="1528876614155">
<createTable tableName="ELECTRICITY_PRODUCTS">
<preConditions onFail="MARK_RAN" onSqlOutput="TEST">
<dbms type="mssql" />
<column autoIncrement="true" name="EP_ID" type="NUMBER">
</preConditions>
<preConditions onFail="MARK_RAN" onSqlOutput="TEST">
<dbms type="oracle" />
<column autoIncrement="false" name="EP_ID" type="FLOAT">
</preConditions>
</createTable>
</changeset>
解决方案
无法在条件内创建列。
如果我了解您的问题,那么您有两个(也许更多)选择:
- 分离每个 dbms 的变更集
为 dbms 创建属性并像这样使用它们:
<property dbms="oracle" name="autoincrement" value="true" /> <property dbms="oracle" name="autoincrementType" value="NUMBER" /> <property dbms="mssql" name="autoincrement" value="false" /> <property dbms="mssql" name="autoincrementType" value="FLOAT" /> <changeSet id="create_a_table" author="system"> <createTable tableName="a_table"> <column name="a_column" autoIncrement="${autoincrement}" type="${autoincrementType}" /> </createTable> </changeSet>
我没有测试过,只是想知道如何解决这个问题。
推荐阅读
- java - 使用 Java 从 SSH 直接流式传输文件
- php - 我想通过教练和工作时间之间的关系来显示日期和日期
- javascript - 如何在 metro.config 中添加多个 babelTransformerPath
- java - 无法将工件 com.squareup.okhttp3:mockwebserver:pom:4.9.1 从/传输到中央(https://repo.maven.apache.org/maven2)
- angular - 如何防止在 Angular 组件中封装导入的全局样式?
- python - 在 Kafka Python 中设置分区键表达式配置
- html - 我的幻灯片中的动画将在幻灯片结束时再次播放
- java - 是否可以通过 Spring Boot 应用程序中的配置属性添加休眠验证器设置?
- unit-testing - 无法使用 Android Studio 运行简单测试
- python - Tkinter 为什么不能从文本框中复制文本?