+-
我需要列出表,colomns和他们的数据类型,我用这个。
select TABLE_NAME, COLUMN_NAME, DATA_TYPE from dba_tab_columns order by TABLE_NAME;
问题是数据库太大,我只需要2000个特定的表columndatatype。
例如:(我有2000行这样的表名是非常随机的,并且在commun中没有任何东西,所以列名也是如此)
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
投票
投票
如果你想在不同的模式和表中显示某些列的信息,请在一个 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
投票
投票
检查以下内容是否足够。(我只考虑你的输出)
select Distinct TABLE_NAME, COLUMN_NAME, DATA_TYPE from dba_tab_columns
如果你不想要这些表格,'BBBBBBB'和'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