2014-02-20 128 views
0

我有表下面的定義在我的數據庫無法插入一行到表約束

CREATE TABLE Products 
    (
    PartNo  CHAR (6) NOT NULL , 
    Description VARCHAR2 (16) NOT NULL , 
    Weight  SMALLINT NOT NULL 
) ; 
ALTER TABLE Products ADD CONSTRAINT CK_PartNo CHECK (PartNo LIKE '[0-9][A-Z][0-9][0-9][0-9][0-9]') ; 
ALTER TABLE Products ADD CONSTRAINT Products_PK PRIMARY KEY (PartNo) ; 

當我嘗試插入一行我得到不符合約束檢查的錯誤。

insert into PRODUCTS(PARTNO, DESCRIPTION, WEIGHT) 
values('1W1234', 'O-ring', 1); 


*Action: do not insert values that violate the constraint. 
Error starting at line : 1 in command - 
insert into PRODUCTS(PARTNO, DESCRIPTION, WEIGHT) 
values('1W1234', 'O-ring', 1) 
Error report - 
SQL Error: ORA-02290: check constraint (DEMO.CK_PARTNO) violated 
02290. 00000 - "check constraint (%s.%s) violated" 
*Cause: The values being inserted do not satisfy the named check 
+1

LIKE不知道正則表達式 - 試試REGEXP_LIKE函數(但我不確定檢查constranits是否支持這個函數)。 – krokodilko

回答

1

你不能在LIKE使用正則表達式語法,你需要使用REGEXP_LIKE

CHECK (REGEXP_LIKE(PARTNO, '[0-9][A-Z][0-9][0-9][0-9][0-9]') 

演示:

CREATE TABLE Products 
    (
    PartNo  CHAR (6) NOT NULL , 
    Description VARCHAR2 (16) NOT NULL , 
    Weight  SMALLINT NOT NULL 
) ; 
ALTER TABLE Products ADD CONSTRAINT CK_PartNo 
    CHECK (REGEXP_LIKE(PARTNO, '[0-9][A-Z][0-9][0-9][0-9][0-9]')) ; 
ALTER TABLE Products ADD CONSTRAINT Products_PK PRIMARY KEY (PartNo) ; 

insert into PRODUCTS(PARTNO, DESCRIPTION, WEIGHT) 
values('1W1234', 'O-ring', 1); 

1 rows inserted. 
3
ALTER TABLE Products ADD CONSTRAINT CK_PartNo 
    CHECK (regexp_like(PartNo, '\d[A-Z]\d{4}')) ;