网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > SQL技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.如何维护SQL Server的“交易日志.
.ASE锁模式:AllPages DataPages .
.DBA:在生产环境中创建监控表DML的.
.Sql 小结.
.快速掌握创建一个相同权限用户的.
.教你快速掌握数据库设计的五种常.
.存储过程编写经验和优化措施.
.mssql锁基础教程.
.用一条SQL实现:一行多个字段数据.
.sql server 灾难恢复.
.SQL Server 2005 读取xml 文件 突.
.SQL Server自动备份无法删除过期.
.品味SQL Server 2005的几个新功能.
.讲解如何检查使用空间大于90%的表.
.数据挖掘技术中的抽取存储 管理和.
.用SQL语句生成带有小计合计的数据.
.如何正确的使用or展开来改写SQL查.
.SQL Server 2005密码安全追踪与存.
.从SQL Server中导入/导出Excel的.
.教你轻松掌握statspack报表的使用.

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

发表日期:2008-3-3


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


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;

上一篇:SQLServer中需要避免的查询设计错误 人气:1234
下一篇:奇怪的SQL:排序方法不同但结果却是一样的 人气:899
浏览全部索引的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐