如何用Oracle查找约束?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

我有一个约束叫做users.SYS_C00381400...。我怎样才能找到这个约束?是否有查询所有约束的方法?

提问于
用户回答回答于
select * from all_constraints
where owner = '<NAME>'
and constraint_name = 'SYS_C00381400'
/

与所有数据字典视图一样,如果你只想检查管理用户的当前模式和DBA_CONSTRAINTS视图,则这是一个USER_CONSTRAINTS视图。

约束名称的构造表示系统生成的约束名称。例如,如果我们在表声明中指定NOT NULL。或者确实是主要或唯一的关键。例如:

SQL> create table t23 (id number not null primary key)
  2  /

Table created.

SQL> select constraint_name, constraint_type
  2  from user_constraints
  3  where table_name = 'T23'
  4  /

CONSTRAINT_NAME                C
------------------------------ -
SYS_C00935190                  C
SYS_C00935191                  P

SQL>

'C'检查,'P'为小学。

通常给关系约束一个明确的名字是个好主意。例如,如果数据库为主键创建索引(如果该列尚未编入索引,它将执行索引),它将使用约束名称o命名索引。你不希望数据库充满名为like的索引SYS_C00935191

大多数人不打扰命名NOT NULL约束。

用户回答回答于

要获得更详细的描述(哪个表/列引用哪个表/列),可以运行以下查询:

SELECT   uc.constraint_name||CHR(10)
   ||      '('||ucc1.TABLE_NAME||'.'||ucc1.column_name||')' constraint_source
   ,       'REFERENCES'||CHR(10)
   ||      '('||ucc2.TABLE_NAME||'.'||ucc2.column_name||')' references_column
FROM user_constraints uc ,
  user_cons_columns ucc1 ,
  user_cons_columns ucc2
WHERE uc.constraint_name = ucc1.constraint_name
AND uc.r_constraint_name = ucc2.constraint_name
AND ucc1.POSITION        = ucc2.POSITION -- Correction for multiple column primary keys.
AND uc.constraint_type   = 'R'
AND uc.constraint_name   = 'SYS_C00381400'
ORDER BY ucc1.TABLE_NAME ,
  uc.constraint_name;

扫码关注云+社区