`
Fangrn
  • 浏览: 819550 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

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;

分享到:
评论

相关推荐

    MySQL常见问题总结

    比如,可以使用ALTER TABLE table_name MODIFY field_name data_type来修改字段数据类型,使用ALTER TABLE table_name CHANGE old_field_name new_field_name data_type来修改字段名和数据类型。 10. 数据库优化和...

    Oracle数据库对象管理及备份与恢复.pdf

    表的结构可以通过ALTER TABLE命令进行修改,如添加(ADD)、删除(DROP)字段,修改(MODIFY)现有字段的属性,重命名(RENAME)表,以及修改存储表空间和存储参数。此外,管理数据完整性约束是保证数据准确性的重要...

    MySQL Alter Table 修改表信息.docx

    ALTER TABLE 语句也可以修改索引名和索引属性,语法如下: ALTER TABLE tb_name DROP INDEX_TYPE index_name, ADD INDEX_TYPE new_index_name (column) 例如,要将 user 表的 status 字段上的索引名从 index_...

    第2章SQL-Server-2014系统简单应用.pptx

    在系统中可以定义多个实例,通常系统提供默认实例和命名实例两种类型。命名实例的名称是计算机网络名称加上具体实例名称,但命名实例名称总长度不能超过 16 个字符。 SQL Server 2014 环境使用说明部分主要介绍了 ...

    oracle数据库基本操作讲义.pptx

    1. 使用CREATE TABLE语句创建表,指定字段名、数据类型和约束条件。 2. 使用DROP TABLE语句删除表,注意这将永久性地删除表及其数据。 3. 使用ALTER TABLE语句修改表,可以添加、删除或修改字段,更改约束,重命名表...

    在SQL中约束的课件,很有用的

    需要注意的是,更改对象名可能会影响依赖于该对象的其他脚本和存储过程。 8. **删除表(DROP TABLE)**: 使用`DROP TABLE`语句可以彻底删除一个表及其所有数据和相关约束。执行此操作前需谨慎,因为它不会提示...

    ORACLE数据库教程.pptx

    创建索引可以提高查询性能,CREATE INDEX语句用于创建普通索引或唯一索引,指定索引名和对应的表及列。 修改表结构,如重命名表,使用ALTER TABLE RENAME TO;增加新列,使用ALTER TABLE ADD;修改已有列的属性,如...

    mysql常见查询语句和学习笔记解析.docx

    ` 用于同时修改字段名和类型。 5. **删除字段**: - `ALTER TABLE 表名 DROP 字段名;` 用于删除字段。 6. **清空表数据但保留表结构**: - `TRUNCATE TABLE 表名;` 用于清空表中的所有数据,但保留表结构不变。 ...

    SQL Server 2008管理员必备指南(超高清PDF)Part1

    进行自动化维护和实现基于策略的管理 监视服务器活动并优化性能 管理日志传送和数据库镜像 执行备份和还原 《微软技术丛书》包括以下几个子系列 从入门到精通 适舍新手程序员的实用教程 侧重于基础技术和特征 提供...

    SQL Server 2008管理员必备指南(超高清PDF)Part3

    进行自动化维护和实现基于策略的管理 监视服务器活动并优化性能 管理日志传送和数据库镜像 执行备份和还原 《微软技术丛书》包括以下几个子系列 从入门到精通 适舍新手程序员的实用教程 侧重于基础技术和特征 提供...

    SQL Server 2008管理员必备指南(超高清PDF)Part2

    进行自动化维护和实现基于策略的管理 监视服务器活动并优化性能 管理日志传送和数据库镜像 执行备份和还原 《微软技术丛书》包括以下几个子系列 从入门到精通 适舍新手程序员的实用教程 侧重于基础技术和特征 提供...

    数据库原理与技术读书笔记.docx

    在SQL Server数据库系统中,我们不仅需要了解其发展历史和不同版本的特性,还要掌握如何在不同操作系统(如Windows、Linux和Unix)上进行登录身份验证。 SQL Server的创建和管理是一个重要的实践环节。例如,创建一...

    数据库代码总结.docx

    索引重命名** - 通过`sp_rename`存储过程可以实现索引的重命名。 ```sql EXEC sp_rename '表名.索引名', '表名.新索引名'; ``` **5. 视图重命名** - 视图的重命名也通过`sp_rename`来完成。 ```sql EXEC sp...

    第6章Oracle数据库基本操作之二.pptx

    Oracle数据库是企业级广泛使用的数据库管理系统,尤其在大型企业及组织中,它的强大功能和稳定性使其成为数据存储和管理的首选。本章主要关注Oracle数据库的基本操作,特别是与数据类型、SQL/Plus环境以及表、索引和...

    2-Oracle常用命令--自己整理

    约束是保证数据完整性的规则,如唯一性约束、非空约束、外键约束等,通过`ALTER TABLE` 命令进行定义和修改。 **第六章:LOAD数据** 数据加载通常使用`SQL*Loader`工具,可以快速批量导入数据到数据库,或者通过`...

    mysql全能资料.doc

    - 添加默认约束: `ALTER TABLE 表名 ALTER COLUMN 列名 SET DEFAULT 默认值` - 添加检查约束: `ALTER TABLE 表名 ADD CONSTRAINT CHECK (列名 &gt; 10)`,请注意MySQL标准SQL不直接支持CHECK约束。 - 添加外键约束: ...

    SQL.Server.2008管理员必备指南.part2.rar(2/4)

     进行自动化维护和实现基于策略的管理  监视服务器活动并优化性能  管理日志传送和数据库镜像  执行备份和还原  《微软技术丛书》包括以下几个子系列  从入门到精通  适舍新手程序员的实用教程  侧重于基础...

    SQL.Server.2008管理员必备指南.part1.rar(1/4)

     进行自动化维护和实现基于策略的管理  监视服务器活动并优化性能  管理日志传送和数据库镜像  执行备份和还原  《微软技术丛书》包括以下几个子系列  从入门到精通  适舍新手程序员的实用教程  侧重于基础...

    SQL.Server.2008管理员必备指南.part3.rar(3/4)

     进行自动化维护和实现基于策略的管理  监视服务器活动并优化性能  管理日志传送和数据库镜像  执行备份和还原  《微软技术丛书》包括以下几个子系列  从入门到精通  适舍新手程序员的实用教程  侧重于基础...

Global site tag (gtag.js) - Google Analytics