表结构对比无非就是字段名、字段类型、字段数据类型、以及字段的顺序的对比。如果需要对比表结构,可以通过下面简单的脚本实现:
select m.owner,
m.table_name,
m.column_id,
m.column_name,
m.data_type,
m.data_length,
n.owner,
n.table_name,
n.column_id,
n.column_name,
n.data_type,
n.data_length
from (select owner,
table_name,
column_id,
column_name,
data_type,
data_length
from dba_tab_columns
where owner = upper('&owner_a')
and table_name = upper('&table_name_a')) m
left join (select owner,
table_name,
column_id,
column_name,
data_type,
data_length
from dba_tab_columns
where owner = upper('&owner_b')
and table_name = upper('&table_name_b')) n
on m.column_id = n.column_id
and m.column_name = n.column_name
and m.data_type = n.data_type
and m.data_length = n.data_length
order by m.table_name, m.column_id;
但是如果A表与B表前面的字段一致,然而B表有一些额外的字段,那么上面的SQL(左连接)就会查不出两者之间结构的不同。此时需要使用右连接才能对比出真正的表结构。所以如果需要对比两者的表结构是否一致,最好左连接查一次,右连接查一次。才能真正的确认两者的表结构的异同。
select m.owner,
m.table_name,
m.column_id,
m.column_name,
m.data_type,
m.data_length,
n.owner,
n.table_name,
n.column_id,
n.column_name,
n.data_type,
n.data_length
from (select owner,
table_name,
column_id,
column_name,
data_type,
data_length
from dba_tab_columns
where owner = upper('&owner_a')
and table_name = upper('&table_name_a')) m
right join (select owner,
table_name,
column_id,
column_name,
data_type,
data_length
from dba_tab_columns
where owner = upper('&owner_b')
and table_name = upper('&table_name_b')) n
on m.column_id = n.column_id
and m.column_name = n.column_name
and m.data_type = n.data_type
and m.data_length = n.data_length
order by m.table_name, m.column_id;




