【问题标题】:Oracle SQL: is it possible to reference a column by different name without renaming itOracle SQL:是否可以通过不同的名称引用列而不重命名它
【发布时间】:2015-06-07 17:20:56
【问题描述】:

我的问题描述: 例如,我有一个表“项目”和列“id”、“名称”、“颜色”,但由于某些奇怪的原因(请不要问为什么——不是我)在“颜色”列中有有关该项目的信息,它本质上应该称为“描述” 项目中的很多代码都依赖于它,简单地重命名列名将花费大量时间。

问题: 有没有办法创建某种指向该列的指针并正确调用它,以便下面的 sql 将按预期工作:

select i.id, i.name, i.description from Item i

(它会知道当我输入“描述”时它应该查看“颜色”列。

【问题讨论】:

  • select i.id, i.name, i.color as description from Item i ?
  • 更改列名,然后为列创建别名,这样您就不会破坏旧代码。
  • 由于列别名不断被提及,我可以将您的问题解释为您希望能够编写任何查询(更新、插入、选择)并能够使用“描述”并拥有数据库神奇地知道你真的是指“颜色”列吗?例如,您希望能够只写:update item set description='abc'。对吗?
  • 阿奎那,是的,你是对的。

标签: sql oracle tablecolumn


【解决方案1】:

您可以使用正确命名的列创建可更新视图。

https://msdn.microsoft.com/en-us/library/ms180800.aspx

【讨论】:

  • 关闭,但我相信这是甲骨文。 docs.oracle.com/cd/E17952_01/refman-5.1-en/…
  • 是的,对不起,我不小心用“sql-server”标记了这个问题。我需要一个适用于 Oracle sql 的答案
  • 遗憾的是,它在上述链接中不起作用:“更具体地说,如果视图包含以下任何内容,则它是不可更新的:...对基表的任何列的多次引用。
  • @xQbert 哎呀我错过了 oracle 标签。但是,为什么需要多次引用该列?
  • 不要以为你可以有一个视图和一个名为 item 的表。所以必须改名。如果表被重命名,那么两个列都必须存在,现有代码才能继续工作。如果 View 被重命名,那么他想要工作的代码就不会了。接近但不是 100%
【解决方案2】:

这叫做列别名,例子很笨拙

select BB from
(select column1 AA, column2 BB, column3 CCC from mytable);

【讨论】:

    【解决方案3】:

    简短的回答:不。长答案:您可以在 Oracle 中创建始终保持这些列同步的插入和更新触发器。但是,最好的办法是接受它,或者重命名它并修复你的代码。将触发器和数据存储在两列中,这样您的旧代码不会中断,但让您的新代码使用新列对我来说就像是一种反模式。坦率地说,即使 Oracle 确实拥有您所要求的开箱即用的东西,它仍然感觉像是一种反模式。作为一名开发人员,我会用类似这样的东西挠头:“让我们看看我们曾经选择过color 的所有地方。”糟糕,您只是错过了所有使用 description 的地方。尝试走这条路似乎很令人困惑。再次,我建议使用它,或者花时间用新的正确名称更新项目

    【讨论】:

    • 谢谢!我只是想确保在我花时间在代码中的任何地方更改它之前没有简单的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 2019-07-10
    相关资源
    最近更新 更多