Не удалось вставить строку: причина ошибки — неверный номер

Я создал эту таблицу, для которой я пытаюсь вставить запись:

    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: неверный номер

Может ли кто-нибудь указать, что я делаю неправильно? Спасибо


person Nayeem Badshah    schedule 11.04.2019    source источник
comment
create table недействителен ('M'+'F' неверен) и даже не запускается.   -  person a_horse_with_no_name    schedule 11.04.2019


Ответы (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);
person Mladen S    schedule 11.04.2019

вы указываете, что CHK_100 неверно + не определено для строк. если хочешь проверить value = 'M' или value = 'F'

то вы должны определить его как:

CONSTRAINTS CHK_100 CHECK(Sex in ('M','F'))
person hotfix    schedule 11.04.2019