Oracle provede implicitní TO_DATE
na nedatové literály při jejich vkládání do DATE
pomocí hodnoty NLS_DATE_FORMAT
jako masku formátu. Pokud se nedatový literál shoduje s tímto formátem, bude fungovat (a pokud ne, pak nebude) – pokud však NLS_DATE_FORMAT
pokud se někdy změní, okamžitě se rozbije (cokoli je velmi obtížné ladit, protože kód, který fungoval, se to nezmění, ale nikdo kód nezmění).
Můžete zjistit svůj aktuální NLS_DATE_FORMAT
s dotazem:
SELECT VALUE
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';
Je lepší explicitně použít TO_DATE
se správnou maskou formátu nebo použít datový doslov ANSI (tj. 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' )
);
Nebo pomocí formátu ANSI agnostického národního prostředí/jazyka:
insert into employees_table
values(
05,
'Sophie',
'Kuchinskey',
'[email protected]',
105,
5000000,
60,
DATE '1994-09-20'
);