Виртуальный столбец Oracle, ссылающийся на другую таблицу

у меня есть таблица TABLE1 в графе COL_TAB1.

select * from TABLE1:
 COL_TAB1
|    1   |
|    2   |
|    3   |

и еще один стол TABLE2 С COL_TAB2 и ссылается на первый столбец COL_TAB1

select * from TABLE2:
 COL_TAB2  |  COL_TAB1
| val1     |     1
| val2     |     2
| val2     |     3

можно ли добавить виртуальный столбец в table1, чтобы я получил тот же результат, что и следующий запрос:

select 
    t1.COL_TAB1, 
    (select t2.COL_TAB2 from TABLE2 t2 where t2.COL_TAB1 = t1.COL_TAB1)
from TABLE1 t1

пробовал :

alter table TABLE1 add (
    SOME_COL_NAME as (select t2.COL_TAB2 from TABLE2 t2 where t2.COL_TAB1 = COL_TAB1)
)

но это дает мне ORA-00936: missing expression

2 ответов


Oracle документация по виртуальным столбцам заявляет Это довольно ясно, вы можете ссылаться только на столбцы в той же таблице;

выражение, используемое в определении виртуального столбца имеет следующий ограничения:

  • он не может ссылаться на другой виртуальный столбец по имени.
  • он может ссылаться только на столбцы, определенные в той же таблице.
  • если это относится к детерминированная пользовательская функция, она не может использоваться как разделяя ключевой столбец.
  • выход выражения должен быть скалярное значение. Он не может вернуть тип данных, предоставленный Oracle, a определяемый пользователем тип, LOB или LONG RAW.

Как утверждает @JoeStefanelli, ваш лучший выбор сделать то, что вы хотите, это создать вид.


создание вида вероятно, будет лучшим выбором в этом случае.

CREATE VIEW vwTable1and2
AS
    SELECT t1.COL_TAB1, t2.COL_TAB2
        FROM TABLE1 t1
            INNER JOIN TABLE2 t2
                ON t1.COL_TAB1 = t2.COL_TAB1