2011-01-14 1 views

ответ

5

Все таблицы USER_ * имеют аналоги с префиксом ALL_ * и DBA_ *. USER_TABLES содержит информацию обо всех ваших таблицах. ALL_TABLES имеет информацию обо всех таблицах, к которым у вас есть доступ. DBA_TABLES имеет информацию обо всех таблицах в вашей базе данных.

Если вы хотите, чтобы увидеть информацию о таблицах USERB в

SELECT * 
    FROM all_tables 
WHERE owner = 'USERB'; 

или

SELECT * 
    FROM dba_tables 
WHERE owner = 'USERB'; 

Первый из них будет работать, если у вас есть выбор доступ на столах пользователя Б. Последний будет работать, если ваш администратор базы данных предоставит вам доступ к представлению DBA_TABLES. Обычно это делается путем предоставления привилегии SELECT ANY DICTIONARY (или SELECT_CATALOG_ROLE в предыдущей версии), хотя администратор баз данных может предоставить доступ к отдельным видам DBA_ *.

2
  • USER_% виды дают то, что у вас есть, вот что находится внутри вашей схемы.
  • ALL_% виды дают то, к чему у вас есть доступ.

Так что вы действительно должны использовать ALL_TABLES/etc и предоставить соответствующий доступ к объектам USERB.

0

Если у вас есть права, вы можете попробовать:

ALTER SESSION SET CURRENT_SCHEMA = USERB;

+1

У меня есть доступ к желаемому пользователю, но этот подход не работает для меня .. он все еще не возвращает таблицы из целевой схемы –