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;
分享到:
相关推荐
比如,可以使用ALTER TABLE table_name MODIFY field_name data_type来修改字段数据类型,使用ALTER TABLE table_name CHANGE old_field_name new_field_name data_type来修改字段名和数据类型。 10. 数据库优化和...
表的结构可以通过ALTER TABLE命令进行修改,如添加(ADD)、删除(DROP)字段,修改(MODIFY)现有字段的属性,重命名(RENAME)表,以及修改存储表空间和存储参数。此外,管理数据完整性约束是保证数据准确性的重要...
ALTER TABLE 语句也可以修改索引名和索引属性,语法如下: ALTER TABLE tb_name DROP INDEX_TYPE index_name, ADD INDEX_TYPE new_index_name (column) 例如,要将 user 表的 status 字段上的索引名从 index_...
在系统中可以定义多个实例,通常系统提供默认实例和命名实例两种类型。命名实例的名称是计算机网络名称加上具体实例名称,但命名实例名称总长度不能超过 16 个字符。 SQL Server 2014 环境使用说明部分主要介绍了 ...
1. 使用CREATE TABLE语句创建表,指定字段名、数据类型和约束条件。 2. 使用DROP TABLE语句删除表,注意这将永久性地删除表及其数据。 3. 使用ALTER TABLE语句修改表,可以添加、删除或修改字段,更改约束,重命名表...
需要注意的是,更改对象名可能会影响依赖于该对象的其他脚本和存储过程。 8. **删除表(DROP TABLE)**: 使用`DROP TABLE`语句可以彻底删除一个表及其所有数据和相关约束。执行此操作前需谨慎,因为它不会提示...
创建索引可以提高查询性能,CREATE INDEX语句用于创建普通索引或唯一索引,指定索引名和对应的表及列。 修改表结构,如重命名表,使用ALTER TABLE RENAME TO;增加新列,使用ALTER TABLE ADD;修改已有列的属性,如...
` 用于同时修改字段名和类型。 5. **删除字段**: - `ALTER TABLE 表名 DROP 字段名;` 用于删除字段。 6. **清空表数据但保留表结构**: - `TRUNCATE TABLE 表名;` 用于清空表中的所有数据,但保留表结构不变。 ...
进行自动化维护和实现基于策略的管理 监视服务器活动并优化性能 管理日志传送和数据库镜像 执行备份和还原 《微软技术丛书》包括以下几个子系列 从入门到精通 适舍新手程序员的实用教程 侧重于基础技术和特征 提供...
进行自动化维护和实现基于策略的管理 监视服务器活动并优化性能 管理日志传送和数据库镜像 执行备份和还原 《微软技术丛书》包括以下几个子系列 从入门到精通 适舍新手程序员的实用教程 侧重于基础技术和特征 提供...
进行自动化维护和实现基于策略的管理 监视服务器活动并优化性能 管理日志传送和数据库镜像 执行备份和还原 《微软技术丛书》包括以下几个子系列 从入门到精通 适舍新手程序员的实用教程 侧重于基础技术和特征 提供...
在SQL Server数据库系统中,我们不仅需要了解其发展历史和不同版本的特性,还要掌握如何在不同操作系统(如Windows、Linux和Unix)上进行登录身份验证。 SQL Server的创建和管理是一个重要的实践环节。例如,创建一...
索引重命名** - 通过`sp_rename`存储过程可以实现索引的重命名。 ```sql EXEC sp_rename '表名.索引名', '表名.新索引名'; ``` **5. 视图重命名** - 视图的重命名也通过`sp_rename`来完成。 ```sql EXEC sp...
Oracle数据库是企业级广泛使用的数据库管理系统,尤其在大型企业及组织中,它的强大功能和稳定性使其成为数据存储和管理的首选。本章主要关注Oracle数据库的基本操作,特别是与数据类型、SQL/Plus环境以及表、索引和...
约束是保证数据完整性的规则,如唯一性约束、非空约束、外键约束等,通过`ALTER TABLE` 命令进行定义和修改。 **第六章:LOAD数据** 数据加载通常使用`SQL*Loader`工具,可以快速批量导入数据到数据库,或者通过`...
- 添加默认约束: `ALTER TABLE 表名 ALTER COLUMN 列名 SET DEFAULT 默认值` - 添加检查约束: `ALTER TABLE 表名 ADD CONSTRAINT CHECK (列名 > 10)`,请注意MySQL标准SQL不直接支持CHECK约束。 - 添加外键约束: ...
进行自动化维护和实现基于策略的管理 监视服务器活动并优化性能 管理日志传送和数据库镜像 执行备份和还原 《微软技术丛书》包括以下几个子系列 从入门到精通 适舍新手程序员的实用教程 侧重于基础...
进行自动化维护和实现基于策略的管理 监视服务器活动并优化性能 管理日志传送和数据库镜像 执行备份和还原 《微软技术丛书》包括以下几个子系列 从入门到精通 适舍新手程序员的实用教程 侧重于基础...
进行自动化维护和实现基于策略的管理 监视服务器活动并优化性能 管理日志传送和数据库镜像 执行备份和还原 《微软技术丛书》包括以下几个子系列 从入门到精通 适舍新手程序员的实用教程 侧重于基础...