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