我创建了要为其插入记录的表:
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:无效的数字
有人可以指出我做错了什么吗?谢谢
答案 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'))