Как получить список таблиц с определенными столбцами с сервера Oracle?

Я использую SQL Server 2008 R2,

У меня есть доступ к серверу Oracle со связанного сервера с доступом только для чтения.

Теперь я хочу получить список таблиц с сервера Oracle, который имеет определенный столбец.

Например, мне нужны все таблицы, в которых есть столбец «Деловой адрес».

Пожалуйста, помогите, если у вас есть какие-либо идеи/советы.!!

Спасибо.


person user2040021    schedule 06.06.2013    source источник


Ответы (2)


Если у вас есть привилегии и предполагается, что фактическое имя столбца BUSINESS_ADDRESS, а не имя столбца с учетом регистра, которое включает пробел.

SELECT owner, table_name, column_name
  FROM dba_tab_columns
 WHERE column_name = 'BUSINESS_ADDRESS'

Если нет, вы можете использовать ALL_TAB_COLUMNS, если вас интересуют только таблицы, которые пользователь Oracle, к которому вы подключаетесь, может запрашивать, или USER_TAB_COLUMNS, если вам нужны только таблицы, которыми владеет пользователь Oracle, к которому вы подключаетесь.

person Justin Cave    schedule 06.06.2013
comment
Но проблема в том, что я использую SQL SERVER 2008r2, и у меня есть доступ только для чтения к серверу оракула, который находится в папке связанного сервера. могу ли я все еще использовать ваше решение? - person user2040021; 07.06.2013
comment
@ user2040021 - Но вы сказали, что у вас есть связанный сервер. Итак, я предполагаю, что вы знаете, как выполнять запросы к Oracle через этот связанный сервер. Это плохое предположение? - person Justin Cave; 07.06.2013
comment
Мне очень жаль, я сделал беспорядок. На самом деле я использую SQL SERVER 2008r2, поскольку у меня есть доступ к Oracle Server, который находится в папке LINKED SERVER SQL SERVER 2008r2. Теперь проблема в том, что мне нужно получить все таблицы с этого сервера оракула, у которого есть определенный столбец с именем Business_Address. - person user2040021; 07.06.2013
comment
@ user2040021 - доступ только для чтения может означать множество разных вещей. Если у вас есть права на чтение словаря данных, вы можете читать из таблицы dba_tab_columns. Если нет, то вы можете искать только те таблицы, к которым у вас есть доступ (или которыми вы владеете), которые также содержат интересующий вас столбец. Вы не сможете проверить каждую таблицу в базе данных на наличие столбца, если вам не были предоставлены привилегии для этого. - person Justin Cave; 07.06.2013
comment
КОГДА Я ПЫТАЛСЯ ЗАПУСТИТЬ ЭТО, КАК СЛЕДУЮЩЕЕ, ВЫБЕРИТЕ TABLE_NAME, COLUMN_NAME FROM [10.123.12.12]..ALL_TAB_COLUMNS, ГДЕ COLUMN_NAME LIKE 'L%'; ЭТО ДАЕТ МНЕ СЛЕДУЮЩУЮ ОШИБКУ Сообщение 208, Уровень 16, Состояние 1, Строка 1 Недопустимое имя объекта '[10.123.12.12]..ALL_TAB_COLUMNS' - person user2040021; 07.06.2013

  • Возможно, у вас нет доступа к некоторым представлениям.
  • Возможно, у вас нет доступа ни к одному представлению.

Но если у вас есть доступ, вы можете запустить следующие операторы SQL:

/* schema you are connected to */
SELECT  table_name
FROM    user_tab_columns
WHERE   LOWER(column_name) LIKE '%business%address%'
;

/* all schemas you have access to*/
SELECT  owner, table_name
FROM    all_tab_columns
WHERE   LOWER(column_name) LIKE '%business%address%'
;
  • Вы можете создать временную таблицу и записывать в нее результаты.
person the_slk    schedule 07.06.2013
comment
КОГДА Я ПЫТАЛСЯ ЗАПУСТИТЬ ЭТО СЛЕДУЮЩИМ ОБРАЗОМ, ВЫБЕРИТЕ TABLE_NAME, COLUMN_NAME FROM [10.123.12.12]..ALL_TAB_COLUMNS, ГДЕ COLUMN_NAME LIKE 'L%'; ЭТО ДАЕТ МНЕ СЛЕДУЮЩУЮ ОШИБКУ Сообщение 208, Уровень 16, Состояние 1, Строка 1 Неверное имя объекта '[10.123.12.12]..ALL_TAB_COLUMNS'. - person user2040021; 07.06.2013
comment
SELECT * FROM linked_server_name..oracle_schema.oracle_table; - person the_slk; 07.06.2013