首页  编辑  

如何查看用户表上的约束内容?

Tags: /超级猛料/Database.数据库相关/Oracle/DBA/   Date Created:

【点击: 13414 】 阿木伯 著  

如何查看用户表上的约束内容?

系统环境:

1、操作系统:Windows 2000 Server,机器内存128M

2、数据库: Oracle 8i R2 (8.1.6) for NT 企业版

3、安装路径:C:\ORACLE

实现方法:

SQL> conn system/manager

SQL> grant connect,resource to test1 identified by pass1;

SQL> conn test1/pass1

SQL> create table a(a number primary key);

SQL> create table b(a number primary key,b number not null,c number check(c>0));

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                --最后更改时间

SQL> desc USER_CONS_COLUMNS

名称                                      空?      类型

----------------------------------------- -------- ----------------

OWNER                                     NOT NULL VARCHAR2(30)        --用户名

CONSTRAINT_NAME                           NOT NULL VARCHAR2(30)        --约束名

TABLE_NAME                                NOT NULL VARCHAR2(30)        --约束类型

COLUMN_NAME                                        VARCHAR2(4000)        --列名

POSITION                                           NUMBER                --

SQL> col 用户名 format a10

SQL> col 约束名称 format a15

SQL> col 约束类型 format a10

SQL> col 表名 format a10

SQL> col 列名 format a10

SQL> col 约束内容 format a20

SQL> select a.OWNER 用户名,

           a.CONSTRAINT_NAME 约束名称,

           a.CONSTRAINT_TYPE 约束类型,

           a.TABLE_NAME 表名,

           b.COLUMN_NAME 列名,

           a.SEARCH_CONDITION 约束内容

    from USER_CONSTRAINTS a,USER_CONS_COLUMNS b

    where a.CONSTRAINT_NAME=b.CONSTRAINT_NAME;

用户名     约束名称        约束类型   表名       列名       约束内容

---------- --------------- ---------- ---------- ---------- --------------------

TEST1      SYS_C001239     P          A          A

TEST1      SYS_C001240     C          B          B          "B" IS NOT NULL

TEST1      SYS_C001241     C          B          C          c>0

TEST1      SYS_C001242     P          B          A

这样,如果发出以下一样的语句,会出现约束错误,可以根据显示的约束号来查询是违反了哪一列上的约束条件

SQL> insert into b values(1,1,-1);

insert into b values(1,1,-1)

*

ERROR 位于第 1 行:

ORA-02290: 违反检查约束条件 (TEST1.SYS_C001241)

SQL> select a.OWNER 用户名,

           a.CONSTRAINT_NAME 约束名称,

           a.CONSTRAINT_TYPE 约束类型,

           a.TABLE_NAME 表名,

           b.COLUMN_NAME 列名,

           a.SEARCH_CONDITION 约束内容

    from USER_CONSTRAINTS a,USER_CONS_COLUMNS b

    where a.CONSTRAINT_NAME='SYS_C001241' and a.CONSTRAINT_NAME=b.CONSTRAINT_NAME;

用户名     约束名称        约束类型   表名       列名       约束内容

---------- --------------- ---------- ---------- ---------- --------------------

TEST1      SYS_C001241     C          B          C          c>0

【最后更新: 06/03/2002 09:37:40 】