Проблемы при запросе базы данных Oracle для списка таблиц: «таблица или представление не существует» - PullRequest
3 голосов
/ 23 сентября 2010

В моей программе мне нужен доступ к схеме базы данных 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 ]

6 голосов
/ 23 сентября 2010

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

3 голосов
/ 23 сентября 2010

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

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

0 голосов
/ 23 сентября 2010

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

...