查询以获取父表和子表之间的约束

时间:2017-05-04 18:19:06

标签: sql oracle

我是oracle的新手,我正在处理表,我需要在两个表之间获取约束并将值作为另一个输入发送。

Table 1
  |_ Column1_pk
  |_ Column2 (foreign key to Table 2) 

Table 2
  |_column2 

所以我想获取table1和column的主键,它们具有2个表之间的关系

1 个答案:

答案 0 :(得分:2)

您需要查询字典视图USER_CONSTRAINTSUSER_CONS_COLUMNS。例如:

DEPT有一个主键,表EMP有一个指向DEPT的外键。首先,我们找到主要密钥DEPT的约束名称,然后是列。然后,使用约束名称,我们找到约束名称,然后找到EMP的外键的列。

select table_name, constraint_name, constraint_type
from   user_constraints
where  table_name      = 'DEPT'
  and  constraint_type = 'P'
;

TABLE_NAME  CONSTRAINT_NAME  CONSTRAINT_TYPE
----------  ---------------  ---------------
DEPT        PK_DEPT          P

select constraint_name, table_name, column_name, position
from   user_cons_columns
where  constraint_name = 'PK_DEPT'
;

CONSTRAINT_NAME  TABLE_NAME  COLUMN_NAME  POSITION
---------------  ----------  -----------  --------
PK_DEPT          DEPT        DEPTNO              1

然后

select table_name, constraint_name, constraint_type
from   user_constraints
where  table_name        = 'EMP'
  and  r_constraint_name = 'PK_DEPT'
;

TABLE_NAME  CONSTRAINT_NAME  CONSTRAINT_TYPE
----------  ---------------  ---------------
EMP         FK_DEPTNO        R

select constraint_name, table_name, column_name, position
from   user_cons_columns
where  constraint_name = 'FK_DEPTNO'
;

CONSTRAINT_NAME  TABLE_NAME  COLUMN_NAME  POSITION
---------------  ----------  -----------  --------
FK_DEPTNO        EMP         DEPTNO              1