Проблемы при запросе базы данных Oracle для списка таблиц: таблица или представление не существует

В моей программе мне нужно получить доступ к схеме базы данных Oracle 11g. Я пытался получить список таблиц, используя такой запрос:

SELECT t.TABLE_NAME, t.OWNER
FROM ALL_TABLES t
WHERE t.DROPPED = 'NO'
ORDER BY t.TABLE_NAME

Запрос работает, и я получаю список таблиц. К сожалению, при запросе некоторых таблиц с использованием возвращаемого имени таблицы я получаю следующую ошибку:

ORA-00942: таблица или представление не существует

Что может вызвать эту ошибку? Может дело в привилегиях?

В отдельном выпуске я также немного смущен тем, могут ли потенциально быть две или таблицы с одинаковым именем, и как я могу различить их. Нужно ли мне следить за этим?

Я использую поставщика Oracle.DataAccess в .NET для подключения к базе данных. Это удаленный сервер, и, к сожалению, у меня очень ограниченный доступ к нему.


person James    schedule 23.09.2010    source источник


Ответы (3)


Это может быть связано с привилегиями. Но это может быть связано с тем, что таблица находится в другой схеме и для нее нет синонима. Будет ли это работать, если вы укажете имя таблицы с владельцем? т.е. вместо этого выберите из [владелец].[table_name]?

person Hobo    schedule 23.09.2010

Тот факт, что у вас есть доступ к представлению ALL_TABLES, не означает, что вы действительно можете выбирать таблицы, которые вы извлекаете через это представление. Вам нужен соответствующий выбор гранта для таблиц, чтобы выбрать их.

2 таблицы могут иметь одно и то же имя, если они принадлежат к другой схеме (область действия на самом деле шире, чем просто таблицы, схема не может иметь два объекта (таблица, представление...) с одинаковым именем)

person vc 74    schedule 23.09.2010

Да, это функция безопасности - если у вас нет разрешения на ВЫБОР из таблицы, Oracle, как правило, даже не подтвердит вам, что она существует (обычный пользователь не сможет видеть вещи в выборе из ВСЕХ, если это не было предоставлено администратором баз данных).

person Gaius    schedule 23.09.2010