You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建含检查约束的Oracle表插入数据时触发ORA-02290错误求助

ORA-02290: 检查约束违反的排查与解决

错误根源

ORA-02290错误说明插入的数据违反了表的某个检查约束。对比建表语句和插入数据,问题出在PhoneNumber字段的约束定义上:

原约束代码:

PhoneNumber CHAR(10) CHECK (PhoneNumber LIKE '[0-9]%'), -- Must be 10 digits

Oracle的LIKE运算符不支持正则表达式的方括号语法,LIKE '[0-9]%'实际是要求字符串以[0-9]这五个字符开头,而不是以数字开头。你插入的'1234567890'显然不符合这个要求,因此触发约束违反。另外,原约束也没确保整个字段都是10位数字,逻辑本身存在漏洞。

修复方案

方案1:修改已创建的表

先确认约束名(可选,用来验证SYS_C008305确实对应PhoneNumber的约束):

SELECT constraint_name, search_condition
FROM user_constraints
WHERE table_name = 'ORACLE_ALL_DATATYPES'
AND constraint_type = 'C';

删除旧约束并添加正确的正则校验约束:

ALTER TABLE Oracle_All_DataTypes DROP CONSTRAINT SYS_C008305;

ALTER TABLE Oracle_All_DataTypes ADD CONSTRAINT chk_phonenumber_valid
CHECK (REGEXP_LIKE(PhoneNumber, '^[0-9]{10}$'));

方案2:重新建表时修正约束

直接在建表语句中替换PhoneNumber的约束逻辑,用REGEXP_LIKE确保字段是10位纯数字:

CREATE TABLE Oracle_All_DataTypes (
    ID NUMBER(10) PRIMARY KEY,
    FirstName VARCHAR2(50) NOT NULL,
    LastName VARCHAR2(50),
    Age NUMBER(3) CHECK (Age BETWEEN 0 AND 120),
    Email VARCHAR2(100) UNIQUE,
    PhoneNumber CHAR(10) CHECK (REGEXP_LIKE(PhoneNumber, '^[0-9]{10}$')), -- 验证10位纯数字
    Salary NUMBER(10, 2) CHECK (Salary > 0),
    JoiningDate DATE NOT NULL,
    IsActive CHAR(1) DEFAULT 'Y' CHECK (IsActive IN ('Y', 'N')),
    DepartmentID NUMBER(5),
    Address VARCHAR2(255),
    City VARCHAR2(50),
    State VARCHAR2(50),
    Country VARCHAR2(50) DEFAULT 'USA',
    PostalCode VARCHAR2(10) CHECK (LENGTH(PostalCode) BETWEEN 5 AND 10),
    ManagerID NUMBER(10),
    CreatedDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    ModifiedDate TIMESTAMP,
    Gender CHAR(1) CHECK (Gender IN ('M', 'F', 'O')),
    Notes CLOB
); 

完成约束修正后,重新执行你的插入语句即可正常插入数据。

内容的提问来源于stack exchange,提问作者Mohammad Saqlain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 11:12:37