добавление фильтров в sql запрос (ORACLE база данных) - PullRequest
0 голосов
/ 06 мая 2020

мне нужно перечислить таблицы, столбцы и их тип данных, я использовал это:

select TABLE_NAME, COLUMN_NAME, DATA_TYPE from dba_tab_columns order by TABLE_NAME;

проблема в том, что база данных слишком велика, и мне нужно только 2000 c таблица / столбец / тип данных . зная, что таблица с тем же именем и столбцом может присутствовать в нескольких SCHEMA

, например: (у меня есть 2000 строк, таких как эти имена таблиц, очень случайны и не имеют ничего общего, так что в случае с именами столбцов )

TABLE            Column           SCHEMA
DMT_AAAAAAA        C1111          ANT_A1
DMT_AAAAAAA        C1111          ANT_A2
BBBBBBBB           A4444          ANT_A3
JHD6365            H5525          ZUGRU
WRK679             C3020          MUSTSU
TDG5378            C66739         SHGUY

Я попытался отфильтровать по схеме, используя этот запрос:

select TABLE_NAME, COLUMN_NAME, DATA_TYPE from dba_tab_columns where OWNER in ('ANT_A1','ANT_A2','ANT_A1','ZUGRU','MUSTSU','SHGUY') order by TABLE_NAME;

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

есть ли способ отфильтровать только необходимые строки? ожидаемый результат:

|table name   |   column    |  data type|
DMT_AAAAAAA        C1111          NUMBER
DMT_AAAAAAA        C1111          VARCHAR
BBBBBBBB           A4444          NUMBER
JHD6365            H5525          VARCHAR
WRK679             C3020          VARCHAR
TDG5378            C66739         VARCHAR

спасибо.

Ответы [ 2 ]

2 голосов
/ 06 мая 2020

Если вы хотите отображать информацию об определенных столбцах в схемах и таблицах, укажите их в предложении IN, используя кортежи:

select owner, table_name, column_name, data_type
from dba_tab_columns 
where (owner, table_name, column_name) in 
(
  ('DMT_AAAAAAA', 'C1111', 'ANT_A1'),
  ('DMT_AAAAAAA', 'C1111', 'ANT_A2'),
  ('BBBBBBBB', 'A4444', 'ANT_A3'),
  ('JHD6365', 'H5525', 'ZUGRU'),
  ('WRK679', 'C3020', 'MUSTSU'),
  ('TDG5378', 'C66739', 'SHGUY')
)
order by owner, table_name, column_name;
1 голос
/ 06 мая 2020

Проверьте, достаточно ли следующего. (Я рассматриваю только ваш вывод)

select Distinct TABLE_NAME, COLUMN_NAME, DATA_TYPE from dba_tab_columns

Если вам не нужны таблицы, «BBBBBBBB» и «WRK679»

Поместите их в таблицу (скажем, tblExclude) и вы можете использовать следующие

select Distinct TABLE_NAME, COLUMN_NAME, DATA_TYPE from dba_tab_columns a
Left Join tblExclude b on a.TABLE_NAME = b.TABLE_NAME
Where b.TABLE_NAME is null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...