Oracle 找到一个约束

我有一个称为 users.SYS_C00381400的约束。我如何找到那个约束是什么?有没有查询所有约束的方法?

344668 次浏览
select * from all_constraints
where owner = '<NAME>'
and constraint_name = 'SYS_C00381400'
/

与所有数据字典视图一样,如果您只想检查当前模式,那么可以使用 USER _ CONSTRINTS 视图,并为管理用户使用 DBA _ CONSTRINTS 视图。

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

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'检查完毕。

一般来说,给关系约束一个显式的名称是一个好主意。例如,如果数据库为主键创建了一个索引(如果该列尚未被索引,它就会这样做) ,它将使用约束名称 oo 命名索引。您不希望数据库中满是名为 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;

来自 给你

也许这个能帮上忙。

SELECT constraint_name, constraint_type, column_name
from user_constraints natural join user_cons_columns
where table_name = "my_table_name";

我发现这个最有用:

select * from ALL_CONS_COLUMNS
where constraint_name = 'SYS_C00381400';

它同时返回表名和列名,例如。

OWNER,CONSTRAINT_NAME,TABLE_NAME,COLUMN_NAME,POSITION
MY_OWNER,SYS_C00381400,MY_TABLE,MY_COLUMN,1