Возможно все, что вы написали, кроме
- Все таблицы TABLE1 должны находиться в одной схеме
потому что в одной схеме не может быть двух таблиц с одинаковыми именами.
«Схема» = пользователь + его объекты (таблицы, представления, процедуры, ...). Поэтому каждый пользователь может иметь свою собственную таблицу TABLE1
.
Похоже, что есть еще одна схема, которая объединяет данные из всех таблиц TABLE1
. Для этого вы можете создать представление как
create or replace view v_table1 as
select 'USER1' owner, t.* from user1.table1 t union all
select 'USER2' , t.* from user2.table1 t union all
...
Это означает, что последнее условие, которое вы написали, должно быть немного расширено, добавив предложение WHERE
, например,
select * from v_table1 where owner = 'USER2'
С другой стороны, если у каждого пользователя есть свой TABLE1
, зачем ему запрашивать этот «агрегированный» (v_)TABLE1
?
Наконец, проверьте VPD (виртуальная частная база данных). В двух словах:
Oracle Virtual Private Database (VPD) позволяет вам создавать политики безопасности для управления доступом к базе данных на уровне строк и столбцов. По сути, Oracle Virtual Private Database добавляет динамическое предложение WHERE в инструкцию SQL, которая создается для таблицы, представления или синонима, к которому была применена политика безопасности Oracle Virtual Private Database.
Подробнее здесь: https://docs.oracle.com/cd/B28359_01/network.111/b28531/vpd.htm#DBSEG98215