我遇到了 liquibase 变更集的问题。变更集在某种程度上是这样的:
<changeSet id="recreate-cool-dbobject" author="WTF">
<preConditions onFail="MARK_RAN">
<tableExists tableName="table_a" />
<tableExists tableName="table_b" />
<tableExists tableName="table_c" />
</preConditions>
<comment>…should be executed if Feature X is available</comment>
<sqlFile
path="resources/view-definition-v2.sql"
relativeToChangelogFile="true"
dbms="oracle"
stripComments="false"
endDelimiter="-- /"
/>
<rollback>
<sqlFile
path="resources/view-definition-v1.sql"
relativeToChangelogFile="true"
dbms="oracle"
stripComments="false"
endDelimiter="-- /"
/>
</rollback>
</changeSet>
我绝对知道table_a
,table_b
并且table_c
确实存在......但仍然一直在view-definition-v1.sql
执行,我多次检查链接文件中的 SQL 是否有效。如果我直接发出该 SQL,它会毫无怨言地执行。
文件里面的SQLview-definition-v1.sql
有点像
CREATE OR REPLACE VIEW view_tab_abc
(
col_a
, col_b
, col_c
, CREATED_AT
, UPDATED_AT
) AS
SELECT a.id AS col_a
, b.id AS col_b
, c.id AS col_c
, a.created_at AS CREATED_AT
, a.updated_at AS UPDATED_AT
FROM tab_a a
JOIN tab_b b on b.id=a.tab_b_id
JOIN tab_c c on c.id=b.tab_c_id
WITH READ ONLY
文件里面的SQLview-definition-v2.sql
有点像
CREATE OR REPLACE VIEW view_tab_abc
(
col_a
, col_b
, col_c
, CREATED_AT
, UPDATED_AT
) AS
SELECT a.id AS col_a
, a.tab_b_id AS col_b
, a.tab_c_id AS col_c
, a.created_at AS CREATED_AT
, a.updated_at AS UPDATED_AT
FROM tab_a a
WITH READ ONLY
我已经尝试过tableName="table_a"
or tableName="TABLE_A"
,但它仍然像它根本不起作用。我还有其他几个没有显示此问题的变更集。有人有任何线索吗?
使用的 Liquibase 版本是 3.4.2,数据库是 Oracle 12cR1 StandardEdition1
感谢您的任何提示和最好的问候,B