Sql 一个liquibase变更集中的2个前提条件

Sql 一个liquibase变更集中的2个前提条件,sql,database,liquibase,changelog,Sql,Database,Liquibase,Changelog,是否可以为变更集的单个元素创建两个预编辑?例如,如果在SQL Server数据库上运行更改日志文件,则生成列;如果在Oracle数据库上运行更改日志文件,则生成另一列。以这样的方式,例如: <changeSet author="Me" id="1528876614155"> <createTable tableName="ELECTRICITY_PRODUCTS"> <preConditions onFail="MARK_RAN" onSqlOutput=

是否可以为变更集的单个元素创建两个预编辑?例如,如果在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>

我没有对此进行测试,只是想知道如何解决问题。

这似乎不可能,但另一个好的解决方案是为这些单个元素创建变更集。在本例中,可能是:

<changeSet author="Me" id="1528876614155">
    <createTable tableName="DAILY DATA">
        <column name="ID" type="NUMBER"/>
    </createTable>
</changeset>

<changeSet author="Me" id="1528876614156">
    <preConditions onFail="MARK_RAN" onSqlOutput="TEST">
        <dbms type="oracle" />
    </preConditions>
    <addColumn tableName="DAILY_DATA">
        <column name="VALUE" type="NUMBER"/>
    </addColumn>
</changeset>
<changeSet author="Me" id="1528876614157">
    <preConditions onFail="MARK_RAN" onSqlOutput="TEST">
        <dbms type="mssql" />
    </preConditions>
    <addColumn tableName="DAILY_DATA">
        <column name="VALUE" type="NUMBER"/>
    </addColumn>
</changeset>

为什么不使用dbms属性创建两个单独的变更集呢?因为我有很多变更集,它们必须经常更改,然后这将是更多的工作。