2013-11-25 100 views
3

我有一個數據庫視圖,它從兩個具有相同名稱的不同表中選擇兩列。如何在創建視圖時在Liquibase中指定列名?

例如生成的DDL視圖會生成以下:

create view MYSCHEMA.VPRODUCTS ("Name", "AlternameName"...) AS 
A.Name, 
B.Name, 
from PRODUCTSA A
 
left join PRODUCTSB B
 
... 

當我運行命令生成Liquibase變更集,在標籤中的SQL只包含兩列的select語句並且不區分唯一的列名稱(即「Name」,「AlternameName」)。

<createView viewName="VPRODUCTS ">SELECT &#13; 
A.Name&#13; 
,B.Name&#13; 
from PRODUCTSA A&#13; 
left join PRODUCTSB B&#13; 
... 

因此,每當我嘗試執行更改集時,Liquibase都會抱怨重複的條目具有相同名稱的列。

我可以通過在標記中添加SQL「AS」語句來解決此問題,但我更喜歡是否有更好的方法來執行此操作。

<createView viewName="VPRODUCTS ">SELECT &#13; 
A.Name&#13; 
,B.Name AS AlternateName &#13; 
from PRODUCTSA A&#13; 
left join PRODUCTSB B&#13; 
... 

是否有一個屬性或標記可以讓我在創建視圖時指定列名,或者在DDL中提供原始SQL?

回答

1

沒有別的辦法。 Liquibase只是將嵌套的SELECT語句傳遞給create view語句,因此select中的任何內容都需要成爲查詢的一部分。除了預先未決的「CREATE VIEW X」之外,沒有對視圖語句的內置預處理。

如果您想提供原始SQL,則始終可以使用該標記。

1

另一種方法是使用子查詢,像這樣:

SELECT [COLUMNLIST 1:1 RENAMED] FROM (your view) 

或者使用WITH塊沿着同一思路。

相關問題