Окружающая среда Oracle 9 & 10. У меня нет доступа к уровню DBA.Как дешево проверить наличие столбца в таблице в другой схеме с Oracle?
Проблема заключается в проверке того, что определенный столбец существует в конкретной таблице, в другой схеме.
Есть два случая, с которыми нужно иметь дело.
- Другая схема в том же экземпляре
- Схема в другом случае, используя db_link
Учитывая мою схему FRED и другая схема BARNEY, я пытался что-то вроде этого
SELECT 1
FROM BARNEY.USER_TAB_COLS
WHERE TABLE_NAME = 'SOME_TABLE'
AND COLUMN_NAME = 'SOME_SPECIFIC_COLUMN'
Что дало [1]: (Ошибка): ORA-00942: таблица или вид не существует
После того, как я проверил это некоторое время, я понял, что USER_TAB_COLS, на самом деле не таблица. Это точка зрения. Я все время выбирал из таблиц, но не из представления.
Я пробовал то же самое с моей db_link, и был удивлен, увидев, что данные возвращаются. У db_link есть встроенное имя схемы/пароля в нем, поэтому мне кажется разумным, что он сработал, поскольку он эффективно входит в другую схему, что должно сделать доступным представление.
После того, как я отправился в гору, и вытер свои глаза на горе Oracle doc, Я ищу кого-то, чтобы указать мне в правильном направлении или хотя бы указать, чего я не вижу.
Какие методы доступны для получения метаданных таблицы, связанных с таблицей, из схемы в одном экземпляре, чтобы проверить, существует ли определенный столбец?
Заранее благодарен.
Зло.
+1 для хороших ответов. Спасибо.
Вы также можете запросить DBA_TAB_COLS. Если у вас есть доступ к этой таблице, вы можете увидеть информацию о других объектах, независимо от того, имеете ли вы возможность запрашивать данные в этой таблице. Это может быть полезно, если вы хотите разрешить учетной записи администратора проверять, есть ли столбец SALARY в таблице EMP без доступа к запросу данных в столбце. –