How to find constraints with same columns but different name between two databases.
select
prodschema.cons prod_constraint, prodschema.tbl prod_table, prodschema.cols prod_cols, localschema.cons local_constraint, localschema.tbl local_table, localschema.cols local_cols,
'ALTER table '|| prodschema.tbl ||' rename constraint ' || prodschema.cons || ' TO ' || localschema.cons || ';' sqlchg
from
(select
constraint_name cons,
constraint_type cons_type,
table_name tbl,
ltrim(max(sys_connect_by_path(column_name, ','))
keep (dense_rank last order by curr), ',') as cols
from
(select
ucc.constraint_name,
uc.constraint_type,
ucc.table_name,
ucc.column_name,
row_number() over (partition by ucc.constraint_name, ucc.table_name order by ucc.position) as curr,
row_number() over (partition by ucc.constraint_name, ucc.table_name order by ucc.position) -1 as prev
from
user_cons_columns@build3 ucc, user_constraints@build3 uc
where ucc.constraint_name = uc.constraint_name
and uc.constraint_name not like 'SYS_%')
group by constraint_name,constraint_type, table_name
connect by prev = PRIOR curr and constraint_name = PRIOR constraint_name and table_name = PRIOR table_name
start with curr = 1
order by cons,tbl) localschema,
(select
constraint_name cons,
constraint_type cons_type,
table_name tbl,
ltrim(max(sys_connect_by_path(column_name, ','))
keep (dense_rank last order by curr), ',') as cols
from
(select
ucc.constraint_name,
uc.constraint_type,
ucc.table_name,
ucc.column_name,
row_number() over (partition by ucc.constraint_name, ucc.table_name order by ucc.position) as curr,
row_number() over (partition by ucc.constraint_name, ucc.table_name order by ucc.position) -1 as prev
from
user_cons_columns ucc, user_constraints uc
where ucc.constraint_name = uc.constraint_name
and uc.constraint_name not like 'SYS_%'
)
group by constraint_name,constraint_type, table_name
connect by prev = PRIOR curr and constraint_name = PRIOR constraint_name and table_name = PRIOR table_name
start with curr = 1
order by cons,tbl) prodschema
where
prodschema.tbl = localschema.tbl
and prodschema.cols = localschema.cols
and prodschema.cons_type = localschema.cons_type
and prodschema.cons != localschema.cons
and prodschema.tbl not like 'BIN%'
order by prodschema.cons, prodschema.tbl;
select
prodschema.cons prod_constraint, prodschema.tbl prod_table, prodschema.cols prod_cols, localschema.cons local_constraint, localschema.tbl local_table, localschema.cols local_cols,
'ALTER table '|| prodschema.tbl ||' rename constraint ' || prodschema.cons || ' TO ' || localschema.cons || ';' sqlchg
from
(select
constraint_name cons,
constraint_type cons_type,
table_name tbl,
ltrim(max(sys_connect_by_path(column_name, ','))
keep (dense_rank last order by curr), ',') as cols
from
(select
ucc.constraint_name,
uc.constraint_type,
ucc.table_name,
ucc.column_name,
row_number() over (partition by ucc.constraint_name, ucc.table_name order by ucc.position) as curr,
row_number() over (partition by ucc.constraint_name, ucc.table_name order by ucc.position) -1 as prev
from
user_cons_columns@build3 ucc, user_constraints@build3 uc
where ucc.constraint_name = uc.constraint_name
and uc.constraint_name not like 'SYS_%')
group by constraint_name,constraint_type, table_name
connect by prev = PRIOR curr and constraint_name = PRIOR constraint_name and table_name = PRIOR table_name
start with curr = 1
order by cons,tbl) localschema,
(select
constraint_name cons,
constraint_type cons_type,
table_name tbl,
ltrim(max(sys_connect_by_path(column_name, ','))
keep (dense_rank last order by curr), ',') as cols
from
(select
ucc.constraint_name,
uc.constraint_type,
ucc.table_name,
ucc.column_name,
row_number() over (partition by ucc.constraint_name, ucc.table_name order by ucc.position) as curr,
row_number() over (partition by ucc.constraint_name, ucc.table_name order by ucc.position) -1 as prev
from
user_cons_columns ucc, user_constraints uc
where ucc.constraint_name = uc.constraint_name
and uc.constraint_name not like 'SYS_%'
)
group by constraint_name,constraint_type, table_name
connect by prev = PRIOR curr and constraint_name = PRIOR constraint_name and table_name = PRIOR table_name
start with curr = 1
order by cons,tbl) prodschema
where
prodschema.tbl = localschema.tbl
and prodschema.cols = localschema.cols
and prodschema.cons_type = localschema.cons_type
and prodschema.cons != localschema.cons
and prodschema.tbl not like 'BIN%'
order by prodschema.cons, prodschema.tbl;
Comments
Post a Comment