【问题标题】:Oracle find a constraintOracle 找到一个约束
【发布时间】:2011-01-06 21:57:04
【问题描述】:

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

【问题讨论】:

  • 如何知道约束? users.SYS_C00381400
  • 约束名称出现在错误消息中。

标签: sql oracle constraints


【解决方案1】:
select * from all_constraints
where owner = '<NAME>'
and constraint_name = 'SYS_C00381400'
/

与所有数据字典视图一样,如果您只想检查当前架构,这是一个 USER_CONSTRAINTS 视图,以及一个用于管理用户的 DBA_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' 用于主要。

通常,给关系约束一个明确的名称是个好主意。例如,如果数据库为主键创建索引(如果该列尚未建立索引,它将执行此操作),它将使用约束名称 oo 命名索引。您不希望数据库中充满像SYS_C00935191 这样的索引。

说实话,大多数人都不会费心命名 NOT NULL 约束。

【讨论】:

    【解决方案2】:

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

    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;
    

    来自here。

    【讨论】:

      【解决方案3】:

      也许这会有所帮助..

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

      【讨论】:

        猜你喜欢
        • 2016-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多