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