如何查看用户表上的约束内容?
2024-07-21 02:36:32
供稿:网友
系统环境: 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