Виртуальный столбец 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