我想做一些视图,但在第四列中有条件。
条件:如果epr.j_id不为null,则填充lj.id,但当epr.j_id为null时,则填充"NONE">
我在那里找到了一些条件标签,但我不知道如何使用它,或者可能还有其他方法。。。
<changeSet id="103" author="m">
<createView replaceIfExists="true"
schemaName="public"
viewName="report">
SELECT DISTINCT l.id,
l.name,
l.gis_ext_id AS gis_ext_id_line,
condition (epr.j_id is not null ),
来自上一个StackOverflow问题:如何将条件添加到changeSet
如果要根据特定条件更新列数据类型,可以将
<preConditions>
与<sqlCheck>,
一起使用,然后使用<modifyDataType>.
因此,假设已经有一个名为TASK的表,并且它包含一个名称为STATUS的列,您可以修改它的数据类型,如下所示:
<changeSet id="1" author="xxx"> <comment>Update Asset table</comment> <preConditions onFail="MARK_RAN"> <and> <columnExists tableName="TASK" columnName="STATUS"/> <sqlCheck expectedResult="0"> SELECT COUNT(*) FROM TASK WHERE STATUS = "pending";</sqlCheck> </and> </preConditions> <modifyDataType tableName="TASK" columnName="STATUS" newDataType="VARCHAR(10)"/> </changeSet>
或者你可能想要另一个onFail行为。查看此链接
- HALT-立即停止执行整个更改日志[默认值]
- 继续-跳过更改集。将在下次更新时再次尝试执行更改集。继续更改日志
- MARK_RAN-跳过更改集,但将其标记为已运行。继续更改日志
- WARN-输出警告并继续正常执行更改集
其他文档:
- Liquibase:创建视图
- Mohit Goyal:检查数据库状态并有条件地在Liquibase中应用更改