Oracle虚拟列引用另一个表

Maj*_*ssi 7 sql oracle oracle11g

我有一张TABLE1带柱子的桌子COL_TAB1.

select * from TABLE1:
 COL_TAB1
|    1   |
|    2   |
|    3   |
Run Code Online (Sandbox Code Playgroud)

而另一台TABLE2COL_TAB2和引用第一列COL_TAB1

select * from TABLE2:
 COL_TAB2  |  COL_TAB1
| val1     |     1
| val2     |     2
| val2     |     3
Run Code Online (Sandbox Code Playgroud)

是否可以在table1上添加虚拟列,以便获得与以下查询相同的结果:

select 
    t1.COL_TAB1, 
    (select t2.COL_TAB2 from TABLE2 t2 where t2.COL_TAB1 = t1.COL_TAB1)
from TABLE1 t1
Run Code Online (Sandbox Code Playgroud)

我试过了 :

alter table TABLE1 add (
    SOME_COL_NAME as (select t2.COL_TAB2 from TABLE2 t2 where t2.COL_TAB1 = COL_TAB1)
)
Run Code Online (Sandbox Code Playgroud)

但它给了我 ORA-00936: missing expression

Joa*_*son 10

Oracle 关于虚拟列文档相当清楚地说明了,您只能引用同一个表中的列;

虚拟列定义中使用的表达式具有以下限制:

  • 它不能按名称引用另一个虚拟列.
  • 它只能引用同一个表中定义的列.
  • 如果它引用确定性的用户定义函数,则不能将其用作分区键列.
  • 表达式的输出必须是标量值.它不能返回Oracle提供的数据类型,用户定义的类型或LOB或LONG RAW.

正如@JoeStefanelli所说,做你想做的最好的选择是创建一个视图.