2013-12-12 3 views
0
CREATE TABLE the_user(Name VARCHAR(40) not null, 
    Address VARCHAR(255) not null, 
    Delivery_address VARCHAR(255), 
    Email VARCHAR(25) not null, 
    Phone INTEGER not null, 
    Status INTEGER not null, 
    Password VARCHAR(25) not null, 
    DOB DATE not null, 
    PRIMARY KEY (Email), 
    FOREIGN KEY (Status) REFERENCES User_Status (Status_Id), 
    CONSTRAINT check_Password CHECK (Password > 4) 
); 


INSERT INTO the_user VALUES (
    'Pergrin Took', 
    '12 Bag end, hobbiton, The Shire, Eriador', 
    'The address, Dublin', 
    '[email protected]', 
    '8679046', 
    '001', 
    'treebeard', 
    TO_DATE('2013/11/04 14:11:34', 'yyyy/mm/dd hh24:mi:ss') 
); 

У меня есть вышеуказанная база данных в Oracle, но когда я пытаюсь запустить команду insert, я получаю ошибку ORA-1722, Invalid Number. В таблице user_status есть запись, которая соответствует 1 во вставке.ORA-001722 Недопустимый номер при вставке в Oracle SQL

Я застрял на этом в течение нескольких дней.

+1

Номера не должны быть заключены в одинарные кавычки: '' 8679046'' - строковое значение, '8679046' - это число. И '' 001'' тоже не номер. –

ответ

1

Цитаты не являются проблемой - они будут преобразованы неявно в числа, насколько они действительны.

Проверьте ограничение:

CONSTRAINT check_Password CHECK (Password > 4) 

Здесь вы пытаетесь сравнить строку и номер -> в этом сравнении Oracle всегда пытается бросить и как числа -> пароль не удается, и вы увидите сообщение об ошибке.

Попробуйте использовать вместо пароля, например. '55', и вы увидите, что строка вставлена.

Возможно, вы хотели это сделать?

CONSTRAINT check_Password CHECK (length(Password) > 4) 
Смежные вопросы