2017-10-12 79 views
0

我使用Liquibase 3.5.3在DB2 LUW 11.0中創建視圖。 我將「replaceIfExists」屬性設置爲true,並且在運行時給它一個「db2上不允許replaceIfExists」的錯誤。使用Liquibase在DB2 LUW中創建視圖

我知道這個屬性在Liquibase中不被DB2支持,但數據庫api允許它(我手動執行帶有create或replace的sql腳本並且工作正常)。

在DB2中運行此腳本有一些解決方法,或許您可以實現此功能嗎?

例子:

CREATE OR REPLACE myView AS (
    SELECT * FROM myTable 
) 
+1

某些平臺上的某些版本的Db2支持「創建或替換視圖」語法。雖然LUW(高於v9.5)和i系列(高於6.1)都支持此語法,但Zb OS的Db2不支持(版本12)。因此,如果要更改liquibase,它需要知道(或動態檢測)哪些版本/平臺支持該語法。也許參與liquibase.jira.com? – mao

回答

1

我願意把這個腳本到一個文件,然後包括將文件從liquibase內與runOnChange="true"的變更

<changeSet author="arthur.dent" id="42" runOnChange="true"> 
    <sqlFile path="create_view.sql" 
      encoding="UTF-8" 
      relativeToChangelogFile="true" 
      stripComments="false" 
      splitStatements="false"/> 
</changeSet> 

因爲runOnChange的,Liquibase將包括一個實際的SQL文件的校驗和,並且只會在視圖的定義改變時才運行它。

另一種選擇是使用runAlways="true",然後每次運行Liquibase時都會重新創建視圖。這對於自動獲取基礎表中的更改是必要的。