create table eng_test1(key int primary key, val int);
create table eng_test2(key int primary key, val int);
create table zgs_test1(key int primary key, val int);
create table zgs_test2(key int primary key, val int);
desc user_cons_columns
desc user_constraints
/*
SQL> desc user_cons_columns
Name Null? Type
----------------------------------------- -------- ----------------------------
OWNER NOT NULL VARCHAR2(30)
CONSTRAINT_NAME NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
COLUMN_NAME VARCHAR2(4000)
POSITION NUMBER
*/
/*
SQL> desc user_constraints
Name Null? Type
----------------------------------------- -------- ----------------------------
OWNER NOT NULL VARCHAR2(30)
CONSTRAINT_NAME NOT NULL VARCHAR2(30)
CONSTRAINT_TYPE VARCHAR2(1)
TABLE_NAME NOT NULL VARCHAR2(30)
SEARCH_CONDITION LONG
R_OWNER VARCHAR2(30)
R_CONSTRAINT_NAME VARCHAR2(30)
DELETE_RULE VARCHAR2(9)
STATUS VARCHAR2(8)
DEFERRABLE VARCHAR2(14)
DEFERRED VARCHAR2(9)
VALIDATED VARCHAR2(13)
GENERATED VARCHAR2(14)
BAD VARCHAR2(3)
RELY VARCHAR2(4)
LAST_CHANGE DATE
INDEX_OWNER VARCHAR2(30)
INDEX_NAME VARCHAR2(30)
INVALID VARCHAR2(7)
VIEW_RELATED VARCHAR2(14)
*/
/*
CONSTRAINT_TYPE == {'C','P','U','R','V','O'}
GENERATED == {'GENERATED NAME','USER NAME'}
*/
column table_name format a20
column constraint_name format a20
column column_name format a20
select table_name,constraint_name,column_name
from user_cons_columns
where table_name like 'ENG%' or table_name like 'ZGS%'
order by 1;
/*
TABLE_NAME CONSTRAINT_NAME COLUMN_NAME
-------------------- -------------------- --------------------
ENG_TEST1 SYS_C00106232 KEY
ENG_TEST2 SYS_C00106233 KEY
ZGS_TEST1 SYS_C00106234 KEY
ZGS_TEST2 SYS_C00106235 KEY
*/
create or replace
procedure rename_constraints
as
cursor c1 is
select
ucc.table_name table_name,
ucc.column_name column_name,
ucc.constraint_name constraint_name,
uc.constraint_type constraint_type,
uc.generated generated,
to_char( uc.constraint_type
|| '$' ||
substr(ucc.table_name,1,13)
|| '$' ||
substr(ucc.column_name,1,14)
) new_cons_name
from
user_cons_columns ucc,
user_constraints uc
where
ucc.table_name = uc.table_name
and
ucc.constraint_name = uc.constraint_name
and
uc.generated = 'GENERATED NAME'
and
( ucc.table_name like 'ENG%'
or ucc.table_name like 'ZGS%'
);
begin
/*
-- ddl sample:
alter table t1 rename constraint SYS_C00104180 to PK_T1_P;
*/
for row_c1 in c1 loop
execute immediate 'alter table '
|| row_c1.table_name
|| ' rename constraint '
|| row_c1.constraint_name
|| ' to '
|| row_c1.new_cons_name;
end loop;
end;
/
show errors
exec rename_constraints
show errors
select table_name,constraint_name,column_name
from user_cons_columns
where table_name like 'ENG%' or table_name like 'ZGS%'
order by 1;
/*
TABLE_NAME CONSTRAINT_NAME COLUMN_NAME
-------------------- -------------------- --------------------
ENG_TEST1 P$ENG_TEST1$KEY KEY
ENG_TEST2 P$ENG_TEST2$KEY KEY
ZGS_TEST1 P$ZGS_TEST1$KEY KEY
ZGS_TEST2 P$ZGS_TEST2$KEY KEY
*/
drop table eng_test1 purge;
drop table eng_test2 purge;
drop table zgs_test1 purge;
drop table zgs_test2 purge;
/*
%%
*/
Monday, March 05, 2007
Oracle: Human-readable constraint names for "hibernate.hbm2ddl.auto"
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment