【问题标题】:Constraint violation error违反约束错误
【发布时间】:2015-10-17 01:58:43
【问题描述】:

我已创建此表作为我的作业的一部分,

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。我不确定我哪里出错了。请帮忙

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    您正在为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 小提琴。

    【讨论】:

    • 我很好奇你为什么不接受这个答案。有什么特别的原因吗?
    • 这里的人知道你的答案是最好的 :) 可能是新手不知道如何使用 SO
    • 只是为了完成图片:“Oracle 中的 LIKE 不支持这些” - 这不是 Oracle 特有的。 SQL 标准中定义的 LIKE 仅支持多个字符的通配符 % 和单个字符的 _(我认为 SQL Server 是唯一偏离该规则的 DBMS)
    • @a_horse_with_no_name 。 . .如果将 MS Access 算作数据库,那么它也会有所偏差,但与 SQL Server 不同。 (我更新了答案以更清楚。)
    【解决方案2】:

    约束使用正则表达式

    所以应该是regexp_like(cnum, '[a-z][0-9][0-9][0-9]')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-14
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      相关资源
      最近更新 更多