Не удалось вставить строку: причина ошибки - неверный номер - PullRequest
0 голосов
/ 11 апреля 2019

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

    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 ]

2 голосов
/ 11 апреля 2019

у вас неправильное ограничение 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 голос
/ 11 апреля 2019

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

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

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