如何在oracle中获取系统生成的表列的检查约束名称

时间:2016-01-21 19:14:15

标签: oracle

我使用oracle

中的以下查询创建了我的TEST_TABLE
  CREATE TABLE "PK"."TEST_TABLE" 
   (    "MYNAME" VARCHAR2(50),  
      "MYVAL1" NUMBER(12,0),
      "MYVAL2" NUMBER(12,0),
      "MYVAL3" NUMBER(12,0) NOT NULL,
     CHECK ("MYVAL1" IS NOT NULL) DEFERRABLE ENABLE NOVALIDATE
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "SYSTEM" ;

在此之后,我想删除应用于MYVAL1列的检查约束。

为此,首先我需要在列MYVAL1上获取检查约束名称。我可以运行alter命令来删除该约束。

那么如何在MYVAL1列上获取确切的系统生成的检查约束名称。

我尝试使用以下查询获取数据,但由于搜索条件是长数据类型列,因此它会在错误之下翻转

从user_constraints中选择*,其中TABLE_NAME =' TEST_TABLE&#39 ;; 在哪里TABLE_NAME =' TEST_TABLE' AND TO_LOB(search_condition)LIKE'%" MYVAL1" IS NOT NULL%'

错误: ORA-00932:不一致的数据类型:预期 - 得到LONG 00932. 00000 - "不一致的数据类型:预期%s得到%s" *原因:
*行动: Line出错:23列:6 任何线索?

1 个答案:

答案 0 :(得分:3)

有两种方法。第一个(推荐) - 在创建约束时给出约束的名称。第二 - 在ALL_CONS_COLUMNS(或USER_CONS_COLUMNS)系统视图中搜索 你需要这样的东西:

select constraint_name
  from all_cons_columns
 where table_name = 'TEST_TABLE'
   and owner = 'PK'
   and column_name = 'MYVAL1'

请参阅文档:https://docs.oracle.com/cloud/latest/db121/REFRN/refrn20045.htm#REFRN20045