`
yangzy666
  • 浏览: 19988 次
  • 性别: Icon_minigender_1
  • 来自: 东莞
社区版块
存档分类
最新评论

oracle----已知主表,通过约束找出引用此主表的所有从表

阅读更多

1.已知oracle数据库中有一个名为user_constraints的系统表,它主要用来管理当前登陆用户所拥有表的所有约束信息。

SQL>desc user_constraints;


名称                                空值                 类型

-------------------------      --------           ------------------
OWNER                        NOT NULL      VARCHAR2(30)
CONSTRAINT_NAME       NOT NULL      VARCHAR2(30)
CONSTRAINT_TYPE                            VARCHAR2(1)
TABLE_NAME                NOT NULL       VARCHAR2(30)
SEARCH_CONDITION     LONG()    
R_OWNER                                        VARCHAR2(30)
R_CONSTRAINT_NAME                       VARCHAR2(30)
DELETE_RULE                                   VARCHAR2(9)
STATUS                                           VARCHAR2(8)
DEFERRABLE                                     VARCHAR2(14)
DEFERRED                                        VARCHAR2(9)
VALIDATED                                      VARCHAR2(13)
GENERATED                                     VARCHAR2(14)
BAD                                                VARCHAR2(3)
RELY                                               VARCHAR2(4)
LAST_CHANGE                                  DATE       
INDEX_OWNER                                 VARCHAR2(30)
INDEX_NAME                                    VARCHAR2(30)
INVALID                                          VARCHAR2(7)
VIEW_RELATED                                VARCHAR2(14)

20 rows selected


2.其中将用到的字段主要有四个:

CONSTRAINT_NAME       ---约束名

R_CONSTRAINT_NAME   ---外键引用的约束名

CONSTRAINT_TYPE        ---约束类型,比如其值:P表示主键,R表示外键,C表示非空

TABLE_NAME                 ---表名


3.举例如下:

假如有主表table1,我们要查找出引用了此表的所有从表。

步骤1. 找出主表的主键约束名

SQL>select a.constraint_name from user_constraints a where a.table_name = upper('table1 ') and a.constraint_type = 'P';

注意:表名要大写;后面的约束类型值为“P”,指主键约束。


步骤2. 通过查找出的主表约束名,找到所有引用了此主表的从表名。

SQL>select a.table_name from user_constraints a where a.r_constraint_name = ' 上面查出的约束名' ;


步骤3. 当然也可以一步到位,将以上步骤合二为一。

SQL>select a.table_name from user_constraints a where a.r_constraint_name in

(select b.constraint_name from user_constraints b where b.table_name = upper(' table1 ') and b.constraint_type = 'P')


或者可以更简洁:

select a.table_name from user_constraints a join user_constraints b
on a.r_constraint_name = b.constraint_name and b.table_name =
upper(' table1 ')
and b.constraint_type = 'P' ;

 

说明:蓝色部分为可选条件,因为从表的外键一般都是引用的主表的主键,所以可以不加约束类型。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics