【问题标题】:Oracle 11g Virtual Column derived from query从查询派生的 Oracle 11g 虚拟列
【发布时间】:2013-08-03 01:48:54
【问题描述】:

是否可以根据对另一个表的查询创建虚拟列? - 类似于以下内容

DateTable               
DateDt   StatusCd           
7/31     
8/1      CURRENT
8/2      
8/5
8/6
8/7 

OtherTable
Column1
Column2
VIRTUALDate = Select DateDt from DateTable where DateTable.StatusCd = 'CURRENT'

如果需要,我可以在示例中更深入地介绍,

【问题讨论】:

    标签: sql oracle database-design oracle11g virtual-column


    【解决方案1】:

    不,这是不可能的。

    来自the documentation

    AS子句中的column_expression有以下限制:

    • 它不能按名称引用另一个虚拟列。

    • column_expression 中引用的任何列都必须在同一个表上定义。

    • 它可以引用确定性的用户定义函数,但如果是,则不能将虚拟列用作分区键 列。

    所以它不能引用另一个表;而且你不能有一个在另一个表上查找的函数,因为这不是确定性的。

    您可以使用视图来实现您正在寻找的效果。

    【讨论】:

    • 在用户定义的函数中,如果我添加一些查询(从另一个表)并返回结果。可行吗?
    • @meadlai - 但是函数不会是确定性的,所以没有。 (我猜如果查询是对静态表的简单查找,您仍然可以通过将函数声明为确定性来滥用它,但没有什么是真正静态的,所以它很危险,并且存在更好的解决方案 - 使用视图或只是在何时加入查询)。
    • 感谢@Alex Poole 我添加了额外的列来解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 2018-05-22
    • 2019-11-04
    • 2013-10-07
    • 2015-10-16
    • 1970-01-01
    相关资源
    最近更新 更多