2017-10-18 36 views
0

我是Oracle最終用戶,而不是數據庫開發人員或管理員。Oracle持久列別名

我們的數據庫已經在列名的一些錯字,類似於一列被命名的ADRESS2代替ADDRESS2

我在查詢中使用這些列,並且要記住適用於哪一列其中錯字很難。另外,我是 anal persnickety關於這使我的代碼看起來(不那麼專業)的方式。

我懷疑沒有機會讓這些列在生產中實際重命名 - 這將是一個低優先級與大量的依賴關係。

這種情況下的最佳做法是什麼?

我能想到的幾個選項:

  • 添加評論認爲,錯字是故意
  • 換表與select(bad_name good_name, * from table)
  • 創建基於上述

視圖但有沒有辦法做這樣的事情:

DECLARE address2 CHAR(8) := 'adress2';  

並在查詢中使用,但返回的值爲ADRESS2而不是char「adress2」。

所需的解決方案將是一個做法是:

  • 不會增加查詢
  • 將被開發爲的情況下列名是笨拙或誤導
  • 一個反應識別的複雜性

回答

2

我認爲唯一合法的迴應是一種觀點。如果我遇到你的情況,我會修正列錯別字。否則,我會創建一個視圖。

不過,一些在你的問題讓我覺得,你願意考慮更多的東西「在那裏」,所以這裏是:

alter table sample_table add address2 
    invisible generated always as (addres2 || '') virtual; 

這很可能不會影響任何應用程序,因爲除非明確要求,否則沒有什麼會看到ADDRESS2列。

但是,它使它適用於你的persnickity類型。

請記住,函數ADDRES2 || ''意味着您的查詢不會在您以這種方式訪問​​的列上使用索引。

重複:我會改變列名或建立一個視圖。

+0

對OP的道歉 - 我看到你在11g上。沒有「INVISIBLE」專欄(這是12c的功能)。 –

+0

沒關係,這仍然是很好的知道。 – C8H10N4O2

+0

不需要它是隱形的。你可以把它作爲'alter table sample_table add address2 always always as(addres2 ||'')virtual;' - 這個可以在11g第1版上運行。 – g00dy