Oracle wykona niejawne TO_DATE
na literałach niebędących datami podczas wstawiania ich do DATE
kolumna przy użyciu wartości NLS_DATE_FORMAT
jako maska formatu. Jeśli literał niedatowany pasuje do tego formatu, będzie działać (a jeśli nie, to nie) - jednak, jeśli NLS_DATE_FORMAT
jest kiedykolwiek zmieniany, to natychmiast się zepsuje (każdy może być ogromnym problemem podczas debugowania, ponieważ kod, który działał, nie ulegnie zmianie, ale nikt go nie zmieni).
Możesz sprawdzić swój aktualny NLS_DATE_FORMAT
z zapytaniem:
SELECT VALUE
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';
Lepiej jest jawnie użyć TO_DATE
z poprawną maską formatu lub użyć literału daty ANSI (np. DATE '2014-12-01'
).
insert into employees_table
values(
05,
'Sophie',
'Kuchinskey',
'[email protected]',
105,
5000000,
60,
TO_DATE( '20-sep-1994', 'DD-Mon-YYYY' )
);
Lub przy użyciu niezależnego od ustawień regionalnych/językowych formatu ANSI:
insert into employees_table
values(
05,
'Sophie',
'Kuchinskey',
'[email protected]',
105,
5000000,
60,
DATE '1994-09-20'
);