Oracle系统中表外键的更名

王朝oracle·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

一、生成系统目前的外键报告单

首先生成系统目前模式下的所有外键情况报告单,SQL脚本如下:

******************************************************************************

脚本1:列出当前模式下所有外键的报告表,可以将其spool到某个文件中

******************************************************************************/

SELECT RPAD(child.TABLE_NAME,25,' ') Child_Tablename,

RPAD(cp.COLUMN_NAME,17,' ') Referring_Column,

RPAD(parent.TABLE_NAME,25,' ') Parent_Tablename,

RPAD(pc.COLUMN_NAME,15,' ') Referred_Column,

RPAD(child.CONSTRAINT_NAME,25,' ') Constraint_Name

FROM USER_CONSTRAINTS child,

USER_CONSTRAINTS parent,

USER_CONS_COLUMNS cp,

USER_CONS_COLUMNS pc

WHERE child.CONSTRAINT_TYPE = 'R' AND

child.R_CONSTRAINT_NAME = PARENT.CONSTRAINT_NAME AND

child.CONSTRAINT_NAME = cp.CONSTRAINT_NAME AND

parent.CONSTRAINT_NAME = pc.CONSTRAINT_NAME AND

cp.POSITION = pc.POSITION

ORDER BY child.OWNER,

child.TABLE_NAME,

child.CONSTRAINT_NAME,

cp.POSITION;

该脚本生成所在模式下的所有外键情况,包括外键名称,父项表名称,子项表名称以及引用的列名称等。在SQL/PLUS下运行该脚本,在运行该脚本之前,可以将输出SPOOL到本地某个文件中。同时要注意,如果应用系统中的外键比较多且复杂的话,这个脚本的运行时间会比较长。

二、生成删除系统自动命名的外键脚本

在SQL/PLUS下,运行下面的脚本来生成删除系统自动命名(也就是外键名称以SYS为前缀)的所有外键,和生成外键报告一样,将生成脚本spool到某个文件中。

******************************************************************************

脚本2:删除系统自动生成的外键约束条件

******************************************************************************/

SELECT 'ALTER TABLE ' || TABLE_NAME ||' '||

'DROP CONSTRAINT ' || CONSTRAINT_NAME || ' ;'

FROM USER_CONSTRAINTS

WHERE CONSTRAINT_NAME LIKE 'SYS%' AND

CONSTRAINT_TYPE = 'R';

运行该脚本,系统生成如下所示的删除外键脚本:

ALTER TABLE DJ_NSRXX DROP CONSTRAINT SYS_C000231;

三、生成重新创建删除的外键脚本

在SQL/PLUS下,运行下面的脚本来生成重新创建删除的外键脚本:

******************************************************************************

脚本3:重新创建外键

******************************************************************************/

SELECT 'ALTER TABLE ' || child.TABLE_NAME||' ' ||

'ADD CONSTRAINT ' || '外键名称 ' ||' '||

'FOREIGN KEY ' || '('|| cp.COLUMN_NAME || ')' ||

' '|| 'REFERENCES ' || parent.TABLE_NAME ||' '||

'('|| pc.COLUMN_NAME || ')'|| child.DELETE_RULE || ' ;'

FROM USER_CONSTRAINTS child,

USER_CONSTRAINTS parent,

USER_CONS_COLUMNS cp,

USER_CONS_COLUMNS pc

WHERE child.CONSTRAINT_TYPE = 'R' AND

child.R_OWNER = PARENT.OWNER AND

child.R_CONSTRAINT_NAME = PARENT.CONSTRAINT_NAME AND

child.CONSTRAINT_NAME = cp.CONSTRAINT_NAME AND

parent.CONSTRAINT_NAME = pc.CONSTRAINT_NAME AND

cp.POSITION = pc.POSITION AND

child.CONSTRAINT_NAME LIKE 'SYS%'

ORDER BY child.OWNER,

child.TABLE_NAME,

child.CONSTRAINT_NAME,

cp.POSITION;

运行该脚本,系统生成如下所示的创建外键脚本:

ALTER TABLE DJ_NSRXX ADD CONSTRAINT 外键名称 FOREIGN KEY (RYDM) REFERENCES DM_GY_SWRY(RYDM);

将上面的外键名称以上面介绍的规范命名规则命名的外键名称代替,就是

ALTER TABLE DJ_NSRXX ADD CONSTRAINT FK_DJ_NSRXX_DM_GY_SWRY FOREIGN KEY (RYDM) REFERENCES DM_GY_SWRY(RYDM);

四、外键更名

生成上面的两个脚本后,首先运行第二步中删除系统自动生成外键的脚本,将系统中命名不规范的外键删除,然后运行第三步中生成的创建外键的脚本,重新创建这些删除的外键,也就实现了对不规范外键的更名。

五、系统检查

操作完成后,重新执行步骤1,再生成一个应用系统的外键报告单,作对比检查。如果正确无误,则更名成功,否则查找原因。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航