Что ж, вам не нужно делать это каждый раз , но хорошая практика говорит, что вы должны проинструктировать Oracle, что у вас есть и что вы ожидаете от этого.
Речь идет о настройках NLS. Если формат даты отличается от используемого вами, вы получите сообщение об ошибке (как вы его уже знаете):
SQL> create table test (datum date);
Table created.
SQL> insert into test values ('2013-06-03');
insert into test values ('2013-06-03')
*
ERROR at line 1:
ORA-01861: literal does not match format string
Но если вы измените формат даты так, чтобы он соответствовал формату, который вы используете, все будет хорошо:
SQL> alter session set nls_date_format = 'yyyy-mm-dd';
Session altered.
SQL> insert into test values ('2013-06-03');
1 row created.
SQL>
Другой вариант, который не зависит от настроек NLS, - это использовать DATE literal . Он всегда имеет формат YYYY-MM-DD и должен начинаться с ключевого слова DATE:
SQL> alter session set nls_date_format = 'dd.mm.yyyy';
Session altered.
SQL> insert into test values ('2013-06-03');
insert into test values ('2013-06-03')
*
ERROR at line 1:
ORA-01861: literal does not match format string
SQL> insert into test values (date '2013-06-03');
1 row created.
SQL>
Или, как вы узнали, используйте функцию TO_DATE
с соответствующей маской формата.