服务器 频道

Oracle系统中表外键的更名

  【IT168 服务器学院】一、生成系统目前的外键报告单
  
  首先生成系统目前模式下的所有外键情况报告单,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,再生成一个应用系统的外键报告单,作对比检查。如果正确无误,则更名成功,否则查找原因。
0
相关文章