我的問題描述: 例如,我有一個表「項目」和列「id」,「名稱」,「顏色」,但對於一些奇怪的原因(請不要問爲什麼 - 它不是我)在「顏色」列中有關於該項目的信息,它基本上應該被稱爲「描述」 項目中的很多代碼取決於它並且簡單地重命名列名將花費大量時間。Oracle SQL:是否可以通過不同的名稱引用列而不重命名
問: 有沒有一種方法來創建某種指向該列的和正確地調用它,下面的SQL將如預期:
(它會知道,當我鍵入「說明」應該考慮「顏色」列中。
我的問題描述: 例如,我有一個表「項目」和列「id」,「名稱」,「顏色」,但對於一些奇怪的原因(請不要問爲什麼 - 它不是我)在「顏色」列中有關於該項目的信息,它基本上應該被稱爲「描述」 項目中的很多代碼取決於它並且簡單地重命名列名將花費大量時間。Oracle SQL:是否可以通過不同的名稱引用列而不重命名
問: 有沒有一種方法來創建某種指向該列的和正確地調用它,下面的SQL將如預期:
(它會知道,當我鍵入「說明」應該考慮「顏色」列中。
簡短的回答:沒有。長答案:您可以在Oracle中創建插入和更新觸發器,並始終保持這些列同步。但是,最好的辦法就是和它一起生活,或者重命名它並修復你的代碼。觸發並將數據存儲在兩列中,以便舊代碼不會中斷,但讓新代碼使用新列對我來說就像是一種反模式。坦率地說,即使Oracle DID擁有你所要求的開箱即用功能,它仍然是一種反模式。作爲一名開發人員,我會用諸如此類的東西來抓我的頭:「讓我們看看我們選擇的所有地方color
。」糟糕,你只是錯過了所有使用description
的地方。看起來非常混亂,試圖走這條路。再次,我建議和它一起生活,或花時間用新的正確名稱更新項目
謝謝!我只是想讓在我花時間在代碼中的任何地方改變它之前,確保沒有簡單的解決方案。 – Andrei 2015-04-02 17:17:03
您可以創建正確命名的列可更新視圖。
接近,但這是我相信的神諭。 https://docs.oracle.com/cd/E17952_01/refman-5.1-en/view-updatability.html – xQbert 2015-04-02 17:02:12
是的,對不起,我無意中用「sql-server」標記了這個問題。我需要一個可以在Oracle sql – Andrei 2015-04-02 17:05:14
中使用的答案可悲的是,它在上述鏈接中不起作用:「更具體地說,如果視圖包含以下任何內容,則該視圖不可更新:...對基礎任何列的多個引用表。 – xQbert 2015-04-02 17:08:55
這就是所謂的列別名,這個例子笨重
select BB from
(select column1 AA, column2 BB, column3 CCC from mytable);
'select i.id,i.name,i.color as item from Item i''的描述? – Powerlord 2015-04-02 16:54:50
更改列名稱,然後爲此列創建別名,這樣您就不會破壞舊代碼。 – Zane 2015-04-02 16:59:49
由於列別名不斷得到提及,我可以將您的問題解釋爲您希望能夠編寫任何查詢(更新,插入,選擇)並能夠使用「描述」並讓數據庫神奇地知道您的意思「顏色」列?例如,你希望能夠寫出:'更新項目集描述='abc''。正確? – aquinas 2015-04-02 17:00:08