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