首页 > 开发 > 综合 > 正文

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表