Oracle laver en implicit TO_DATE
på ikke-dato-literaler, når du indsætter dem i en DATE
kolonne med værdien NLS_DATE_FORMAT
som formatmasken. Hvis den ikke-dato-literal matcher dette format, vil den fungere (og hvis den ikke gør det, vil den ikke) - dog hvis NLS_DATE_FORMAT
nogensinde ændres, vil den øjeblikkeligt gå i stykker (det vil være en stor smerte at fejlfinde, da den kode, der virkede, ikke vil, men ingen vil have ændret koden).
Du kan finde ud af din nuværende NLS_DATE_FORMAT
med forespørgslen:
SELECT VALUE
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';
Det er bedre eksplicit at bruge TO_DATE
med det korrekte formatmaske eller at bruge en ANSI-dato-literal (dvs. 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' )
);
Eller ved at bruge lokalitet/sprog agnostisk ANSI-format:
insert into employees_table
values(
05,
'Sophie',
'Kuchinskey',
'[email protected]',
105,
5000000,
60,
DATE '1994-09-20'
);