嗨我需要将一组表的列与另一组表进行比较。让我解释一下结构。第二组表从第一组开始,列数较少。
TABLE NAMES:
W_table_1_fact
W_tables_2_fact
.........
........
W_table_n_dim
W_table_1_dim
W_tables_2_dim
.........
........
W_table_n_dim
ABC_W_table_1_fact
ABC_W_tables_2_fact
.........
........
ABC_W_table_n_dim
ABC_W_table_1_dim
ABC_W_tables_2_dim
.........
........
ABC_W_table_n_dim
现在带有前缀ABC的表的数据和列都是从原始表中获取的,除了几个缺少的列和一些数据(现在不关心)。我需要检查我们需要的列是否已经在带有前缀ABC的表中加载。所以我需要进行一个查询,告诉我哪些列丢失,任何人都可以帮我查询。如果您需要任何信息,请随时询问我将提供任何所需信息。
答案 0 :(得分:2)
所以你想看到源列表中的列(而不是数据)但不是整个表列表的目标?你可以为USER_TAB_COLUMNS做一个MINUS。例如:
with tables as
(select table_name t1, 'ABC_'||table_name t2 --<--- prefixed table 2 based on tables name
from user_tables
where table_name in ('W_TABLE_1_FACT', 'W_TABLES_2_FACT' ))
select t.*,
cursor (select column_name
from user_tab_columns
where table_name = t.t1
minus
select column_name
from user_tab_columns
where table_name = t.t2) missing_columns
from tables t