Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103753039
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-21 21:23:25

来自:

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

首先生成系统目前模式下的所有外键情况报告单,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;

阅读(471) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~