Oracle ще направи неявно TO_DATE
на литерали без дата, когато ги вмъквате в DATE
колона, използвайки стойността на NLS_DATE_FORMAT
като маска на формат. Ако литералът без дата съвпада с този формат, той ще работи (а ако не, тогава няма да стане) - обаче, ако NLS_DATE_FORMAT
се променя някога, то веднага ще се счупи (отстраняването на грешки е огромна мъка, тъй като работещият код няма да го направи, но никой няма да е променил кода).
Можете да разберете текущия си NLS_DATE_FORMAT
със заявката:
SELECT VALUE
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';
По-добре е изрично да използвате TO_DATE
с правилната маска за формат или да използвате ANSI литерал за дата (т.е. 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' )
);
Или като използвате ANSI формат, независим от локал/език:
insert into employees_table
values(
05,
'Sophie',
'Kuchinskey',
'[email protected]',
105,
5000000,
60,
DATE '1994-09-20'
);