У нас есть большая база данных Oracle с множеством таблиц. Есть ли способ запросить или выполнить поиск, чтобы узнать, есть ли какие-либо таблицы с определенными именами столбцов?
IE покажет мне все таблицы со столбцами: id, fname, lname, address
Деталь, которую я забыл добавить: мне нужно иметь возможность искать по разным схемам. Тот, который я должен использовать для подключения, не владеет таблицами, которые мне нужно искать.
column_name
+,like
если не знаете точное имя:select owner, table_name, column_name from all_tab_columns where column_name like 'someField%';
Для поиска имени столбца используйте приведенный ниже запрос, если вы точно знаете имя столбца:
select owner,table_name from all_tab_columns where upper(column_name) =upper('keyword');
Чтобы выполнить поиск по имени столбца, если вы не знаете, как правильно использовать столбец ниже:
select owner,table_name from all_tab_columns where upper(column_name) like upper('%keyword%');
источник
Необходимые данные находятся в таблице метаданных cols:
SELECT * FROM COLS WHERE COLUMN_NAME = 'id'
Это даст вам список таблиц, в которых есть все нужные вам столбцы:
select distinct C1.TABLE_NAME from cols c1 inner join cols c2 on C1.TABLE_NAME = C2.TABLE_NAME inner join cols c3 on C2.TABLE_NAME = C3.TABLE_NAME inner join cols c4 on C3.TABLE_NAME = C4.TABLE_NAME inner join tab t on T.TNAME = C1.TABLE_NAME where T.TABTYPE = 'TABLE' --could be 'VIEW' if you wanted and upper(C1.COLUMN_NAME) like upper('%id%') and upper(C2.COLUMN_NAME) like upper('%fname%') and upper(C3.COLUMN_NAME) like upper('%lname%') and upper(C4.COLUMN_NAME) like upper('%address%')
Чтобы сделать это в другой схеме, просто укажите схему перед таблицей, как в
SELECT * FROM SCHEMA1.COLS WHERE COLUMN_NAME LIKE '%ID%';
Если вы хотите объединить поиск по множеству схем в один выходной результат, вы можете сделать это:
SELECT DISTINCT 'SCHEMA1' AS SCHEMA_NAME ,TABLE_NAME FROM SCHEMA1.COLS WHERE COLUMN_NAME LIKE '%ID%' UNION SELECT DISTINCT 'SCHEMA2' AS SCHEMA_NAME ,TABLE_NAME FROM SCHEMA2.COLS WHERE COLUMN_NAME LIKE '%ID%'
источник
SELECT * FROM COLS
ничего не возвращает из моей схемы. У меня есть только избранные привилегии на столах. Не было бы достаточно выбора, чтобы я мог просматривать его через COLS?select * from schema1.cols
дает мнеtable or view does not exist
ошибку. Связано ли это с настройкой привилегий?Вот тот, который мы сохранили в findcol.sql, чтобы его можно было легко запустить из SQLPlus.
set verify off clear break accept colnam prompt 'Enter Column Name (or part of): ' set wrap off select distinct table_name, column_name, data_type || ' (' || decode(data_type,'LONG',null,'LONG RAW',null, 'BLOB',null,'CLOB',null,'NUMBER', decode(data_precision,null,to_char(data_length), data_precision||','||data_scale ), data_length ) || ')' data_type from all_tab_columns where column_name like ('%' || upper('&colnam') || '%'); set verify on
источник