2015-10-17 132 views
3

我創造了這個表作爲我的任務的一部分,約束衝突錯誤

create table course (
    cnum char(4) primary key, 
    title varchar(20), 
    credits number(1) 
); 

表有這個檢查約束cnum_ck

cnum like '[a-z][0-9][0-9][0-9]' 

當我試圖插入下面一行

insert into course values('m130', 'xyz', 3); 

它扔了check constraint cnum_ck violation error。我不確定我出錯的地方。請幫助

回答

2

對於LIKE,您正在使用SQL Server模式,並且Oracle中的LIKE(或除Sybase之外的任何其他數據庫)不支持這些非標準通配符。相反,使用正則表達式:

create table course (
    cnum char(4) primary key, 
    title varchar(20), 
    credits number(1), 
    constraint chk_cnum check (regexp_like(cnum, '^[a-z][0-9][0-9][0-9]$')) 
); 

insert into course values('m130', 'xyz', 3); 

Here是一個SQL小提琴。

+0

非常感謝,它的工作原理:) –

+1

我很好奇,爲什麼你接受的答案。有什麼特別的原因嗎? –

+0

這裏的人們都知道你的答案是最好的:)這可能是新手不知道如何使用SO –

1

約束使用正則表達式

所以應該regexp_like(cnum, '[a-z][0-9][0-9][0-9]')

+0

非常感謝。它現在有效。 –