分享
 
 
 

对系统默认的约束名和索引名进行重命名

王朝other·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

对系统默认的约束名和索引名进行重命名的存储过程示例:

create or replace procedure proc_rename_constraint

as

--查找用户所有表的游标

cursor cur_table is select table_name from user_tables;

--查找某张表所有约束的游标

cursor cur_cons (c_table varchar2) is select

c.constraint_name,c.constraint_type,

c.search_condition from user_constraints c

where c.table_name=c_table

and substr(c.constraint_name,2,2) <> 'K_';

--查找某个约束所有字段的游标

cursor cur_columns(c_cons varchar2) is select

column_name from user_cons_columns

where constraint_name=c_cons;

--存储修改后的约束名

v_new_cons_name varchar2(100);

--存储修改约束名的SQL语句

v_sql varchar2(150);

--存储重名的个数

cnt number :=1;

--存储新索引名的个数

n_idx number;

--存储新约束名的个数

n_con number;

begin

--循环取表名

for cur_ltable in cur_table loop

--循环取约束名

for cur_lcons in cur_cons(cur_ltable.table_name) loop

v_new_cons_name :=null;

--循环取字段名

for cur_lcolumns in cur_columns(cur_lcons.constraint_name) loop

v_new_cons_name := v_new_cons_name || cur_lcolumns.column_name;

end loop;

v_new_cons_name := replace(v_new_cons_name,'_','');

v_new_cons_name := cur_ltable.table_name ||'_' || v_new_cons_name;

if cur_lcons.constraint_type='P' then

v_new_cons_name := 'PK_' || v_new_cons_name;

elsif cur_lcons.constraint_type='R' then

v_new_cons_name := 'FK_' || v_new_cons_name;

elsif cur_lcons.constraint_type='U' then

v_new_cons_name := 'UK_' || v_new_cons_name;

elsif cur_lcons.constraint_type='C'

and instr(cur_lcons.search_condition,'IS NOT NULL') > 0 then

v_new_cons_name := 'CK_' || v_new_cons_name || 'NOTNULL' ;

elsif cur_lcons.constraint_type='C'

and instr(cur_lcons.search_condition,'IS NOT NULL') = 0

and cur_lcons.search_condition is not null then

v_new_cons_name := 'CK_' || v_new_cons_name;

end if;

--约束名如果超过30个字符的处理

if length(v_new_cons_name) > 29 then

v_new_cons_name := substr(v_new_cons_name,1,15)

|| substr(v_new_cons_name,-14);

end if;

--查找系统里是否有新的约束名

select count(*) into n_con from user_constraints

where constraint_name=v_new_cons_name;

select count(*) into n_idx from user_indexes where

index_name=v_new_cons_name;

if n_con > 0 or n_idx > 0 then

v_new_cons_name := v_new_cons_name || to_char(cnt);

cnt := cnt +1;

end if;

--对由主键和唯一键创建的索引进行改名,改后的名字为新的约束名

if cur_lcons.constraint_type='P' or cur_lcons.constraint_type='U' then

select count(*) into n_con from user_indexes where

index_name=cur_lcons.constraint_name;

if n_con = 1 then

v_sql := 'alter index ' || cur_lcons.constraint_name

|| ' rename to ' || v_new_cons_name;

execute immediate v_sql;

end if;

end if;

--对约束改名

v_sql := 'alter table ' || cur_ltable.table_name || ' rename constraint ';

v_sql := v_sql || cur_lcons.constraint_name || ' to ' || v_new_cons_name;

execute immediate v_sql;

end loop;

end loop;

end;

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有