2013-06-20 4 views
-1
create table Department 
(Dname varchar(255) NOT NULL, Dnumber int NOT NULL PRIMARY KEY, Mgr_SSN char(9) NOT NULL, Mgr_start_Date DATE); 

insert into Department values('HR', '1', '11001', '2012-04-05 10:15:00'); 

Я получаю сообщение об ошибке "not valid month".
Должны ли мы определить формат даты при создании таблицы?
Я использую Oracle11g.Я получаю ошибку "Недействительный месяц"

+0

Возможный дубликат [здесь] (http://stackoverflow.com/questions/17206160/oracle-how-to-use-time-and-date) – Noel

ответ

1

Если у вас есть столбец DATE, вы всегда должны вставить DATE, а не VARCHAR2. Опираясь на неявное литье, чтобы правильно преобразовать строку, это плохая идея - для разных сеансов очень просто иметь разные настройки NLS и, следовательно, делать неявное преобразование по-разному (либо приводить к другому DATE, либо к ошибке). Самый простой способ сделать это - использовать функцию to_date.

insert into Department(dname, 
         dnumber, 
         mgr_ssn, 
         mgr_start_date) 
    values('HR', 
     1, 
     '11001', 
     to_date('2012-04-05 10:15:00', 'yyyy-mm-dd hh24:mi:ss')); 

Я также изменил инструкцию, чтобы перечислить столбцы, которые, как правило, является хорошей практикой, так как это гарантирует, что вы не должны смотреть на физический порядок столбцов в таблице каждый раз, и так как это позволяет INSERT, чтобы работать в будущем, если вы добавите новые столбцы в таблицу. Поскольку dnumber является NUMBER, я также изменил инструкцию INSERT, чтобы вставить число, а не вставлять строку (опять же, не полагайтесь на неявное преобразование, если нет необходимости делать это). Я не исправил очевидную ошибку, что у вас есть столбец CHAR(9), представляющий номер социального страхования, для которого вы вставляете строку из 5 символов.

Смежные вопросы