--step1 disable constraint begin for i in (select uc.constraint_name, uc.table_name from user_constraints uc, all_tables tab where uc.OWNER='xx' and tab.OWNER='xx' and uc.table_name=tab.table_name) LOOP begin execute immediate 'alter table '||i.table_name||' disable constraint '||i.constraint_name||''; exception when others then dbms_output.put_line(i.table_name); dbms_output.put_line(i.constraint_name); end; end loop; end; / --step2: drop index BEGIN FOR ind IN (SELECT ui.index_name FROM user_indexes ui, all_tables tab WHERE ui.TABLE_OWNER='xx' and tab.OWNER='xx' and ui.table_name=tab.table_name and INDEX_TYPE != 'LOB') LOOP BEGIN execute immediate 'DROP INDEX '||ind.index_name; exception when others then dbms_output.put_line(ind.index_name); END; END LOOP; END; / COMMIT; --step3 update all coulmn undefine schema_name; declare l_Err varchar2(200); begin for r in (select atc.table_name, atc.column_name, atc.data_length from all_tab_columns atc, all_tables tab WHERE atc.owner=tab.OWNER and atc.table_name=tab.table_name and atc.data_type = 'VARCHAR2' and atc.char_used = 'B' --Indicates that the column uses BYTE length semantics (B) or CHAR length semantics (C) -- and atc.table_name = 'INACTIVE_ACCOUNT' --TEST and atc.owner = upper('&&schema_name')) loop begin execute immediate 'alter table '|| upper('&&schema_name') || '.' || r.table_name || ' modify ' || r.column_name || ' varchar2(' || r.data_length || ' char)'; end; commit; end loop; end; / COMMIT; --step4 create index please refer in last part --step5 create index - run two times begin for i in (select uc.constraint_name, uc.table_name from user_constraints uc, all_tables tab where uc.OWNER='xx' and tab.OWNER='xx' and uc.table_name=tab.table_name) LOOP begin execute immediate 'alter table '||i.table_name||' enable constraint '||i.constraint_name||''; exception when others then dbms_output.put_line(i.constraint_name); end; end loop; end; / COMMIT; begin for i in (select uc.constraint_name, uc.table_name from user_constraints uc, all_tables tab where uc.OWNER='xx' and tab.OWNER='xx' and uc.table_name=tab.table_name) LOOP begin execute immediate 'alter table '||i.table_name||' enable constraint '||i.constraint_name||''; exception when others then dbms_output.put_line(i.constraint_name); end; end loop; end; / COMMIT;