2017-10-18 66 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