约束违规错误

3

作为我的任务的一部分,我创建了这个表格。

create table course (
    cnum char(4) primary key,
    title varchar(20),
    credits number(1)
);
表格
有这个检查约束。
cnum like '[a-z][0-9][0-9][0-9]'

当我试图插入以下行时
insert into course values('m130', 'xyz', 3);

它抛出了检查约束cnum_ck违规错误。我不确定我哪里做错了。请帮忙。

2个回答

2

您正在使用SQL Server模式来进行LIKE匹配,而这些非标准通配符在Oracle(以及除Sybase之外的任何其他数据库)中都不受LIKE支持。相反,请使用正则表达式:

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);

这里有一个SQL fiddle。

这里


1
我很好奇你为什么不接受那个答案。有什么特别的原因吗? - Gordon Linoff
这里的人都知道你们的答案是最好的 :) 或许新手不知道如何使用 SO。 - Vamsi Prabhala
1
只是为了完整起见:“这些在Oracle中不受LIKE支持” - 这不仅限于Oracle。根据SQL标准定义,LIKE仅支持通配符“%”表示多个字符,“_”表示单个字符(我认为SQL Server是唯一偏离此规则的DBMS)。 - user330315
@a_horse_with_no_name . . . 如果你把MS Access算作数据库的话,那么它也会有所偏差,但与SQL Server不同。(我更新了答案以使其更清晰。) - Gordon Linoff

1
该约束使用正则表达式,因此它应该是regexp_like(cnum, '[a-z][0-9][0-9][0-9]')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接