无法插入行:错误原因是数字无效

时间:2019-04-11 16:42:14

标签: sql oracle ora-01722

我创建了要为其插入记录的表:

    CREATE TABLE EMPLOYEE(
    Emp_No NUMBER(4),
    Ename VARCHAR2(20) NOT NULL,
    Sex CHAR(1) NOT NULL,
    Job VARCHAR2(20) NOT NULL,
    Mgr_No NUMBER(4) REFERENCES EMPLOYEE(Emp_No),
    DOJ DATE NOT NULL,
    Sal NUMBER(8,2) NOT NULL,
    Comm NUMBER(6,2),
    Dept_No NUMBER(2),
    CONSTRAINTS PK_103 PRIMARY KEY(Emp_no),
    CONSTRAINTS CHK_100 CHECK(Sex LIKE 'M'+'F')
    );

但是,当我插入时:

    INSERT INTO EMPLOYEE (Emp_No, Ename, Sex, Job, Mgr_no, DOJ, Sal, Comm, Dept_No) 
      VALUES (100, 'Satish', "M", 'Sr.Developer', 9, '25/FEB/2019',  18000, 5, 10);

我遇到以下错误:

  

第1行出现错误:ORA-01722:无效的数字

有人可以指出我做错了什么吗?谢谢

2 个答案:

答案 0 :(得分:2)

您的chk_100约束错误。

表必须这样创建:

CREATE TABLE EMPLOYEE
( Emp_No NUMBER(4), 
  Ename VARCHAR2(20) NOT NULL, 
  Sex CHAR(1) NOT NULL, 
  Job VARCHAR2(20) NOT NULL, 
  Mgr_No NUMBER(4) REFERENCES EMPLOYEE(Emp_No), 
  DOJ DATE NOT NULL, 
  Sal NUMBER(8,2) NOT NULL, 
  Comm NUMBER(6,2), 
  Dept_No NUMBER(2), 
  CONSTRAINTS PK_103 PRIMARY KEY(Emp_no),
  CONSTRAINTS CHK_100 CHECK(Sex in ('M', 'F'))
  --CONSTRAINTS CHK_100 CHECK(Sex LIKE 'M'+'F')   -- this constraint is not correct

);

为什么要插入第一行,如果将任何值放在Mgr_No中都会失败,因为表为空并且引用不存在。

所以第一次插入必须是这样的:

INSERT INTO EMPLOYEE5 
        (Emp_No, Ename,   Sex,  Job,          Mgr_no, DOJ,     Sal,   Comm, Dept_No) 
VALUES (100,   'Satish', 'M', 'Sr.Developer', null,      sysdate, 18000, 5,    10);

并且第二次插入:

INSERT INTO EMPLOYEE5 
        (Emp_No, Ename,   Sex,  Job,          Mgr_no, DOJ,     Sal,   Comm, Dept_No) 
VALUES (101,   'Satish', 'M', 'Sr.Developer - other', 100,      sysdate, 18000, 5,    10);

答案 1 :(得分:1)

您约束CHK_100是错误的+未为字符串定义。如果您想检查它value = 'M'value = 'F'

然后您应该按以下方式定义它:

CONSTRAINTS CHK_100 CHECK(Sex in ('M','F'))