2016-01-21 75 views
0

检查表列的约束名字我已创建使用下面的查询我的TEST_TABLE表在Oracle如何获取系统生成的Oracle

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

我尝试使用以下的查询,但作为搜索条件长数据类型列,有人trowing下面误差获取数据

SELECT * FROM USER_CONSTRAINTS其中TABLE_NAME =“TEST_TABLE”; WHERE TABLE_NAME = 'TEST_TABLE' 和TO_LOB(search_condition)LIKE '% “MYVAL1” IS NOT NULL%'

错误: ORA-00932:不一致的数据类型:预期 - 了长 00932. 00000 - “不一致的数据类型:预计%s得到%s“ *原因:
*操作: 错误在行:23列:6 任何线索?

+0

你为什么标记3个不同的数据库时,你知道,这只是相关的Oracle? –

+0

除了'Oracle'之外,是否有一个原因被标记为'MySQL'和'SQL Server'?看起来这是一个特定于Oracle的问题。 –

+0

重复:http://stackoverflow.com/questions/11879217/display-names-of-all-constraints-for-a-table-in-oracle-sql也许? – xQbert

回答

2

有两种方法。首先(推荐) - 在创建时给出约束的名称。其次 - 在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

+0

谢谢德米特里。有效。 – picnic4u