Проблемы при запросе базы данных 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 для подключения к базе данных. Это удаленный сервер, и, к сожалению, у меня есть очень ограниченный доступ к нему.
Решение
Это может быть до привилегии. Но это может быть до таблицы, находящегося в другую схему, и для этого не является синонимом. Работает ли это, если вы квалифицируете имя таблицы с владельцем? Т.е. выберите из [Владельца]. [Table_name] вместо этого?
Другие советы
Просто потому, что у вас есть доступ к представлению All_tables, не означает, что вы действительно можете выбрать таблицы, которые вы получаете через этот вид. Вам нужен соответствующий грант, выберите на таблицах, чтобы выбрать их.
2 Таблицы могут иметь то же имя, если они принадлежат к другой схеме (схема на самом деле шире, чем просто таблицы, схема не может иметь два объекта (таблица, вид ...), которые имеют одинаковое имя)
Да, это функция безопасности - если у вас нет разрешения на выбор из таблицы, Oracle, как правило, даже не признает вас, что она существует (обычный пользователь не сможет увидеть вещи в выборе от All_ если это не было предоставлено по ДБА).