Oracle hará un TO_DATE
implícito en literales que no son de fecha al insertarlos en un DATE
columna usando el valor de NLS_DATE_FORMAT
como máscara de formato. Si el literal que no es de fecha coincide con este formato, funcionará (y si no es así, no funcionará); sin embargo, si el NLS_DATE_FORMAT
se cambia alguna vez, entonces se romperá inmediatamente (cualquiera que sea un gran dolor de depurar ya que el código que estaba funcionando no lo hará, pero nadie habrá cambiado el código).
Puede averiguar su NLS_DATE_FORMAT
actual con la consulta:
SELECT VALUE
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';
Es mejor usar explícitamente TO_DATE
con la máscara de formato correcta o para usar un literal de fecha ANSI (es decir, 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' )
);
O bien, utilizando el formato ANSI independiente de la configuración regional/idioma:
insert into employees_table
values(
05,
'Sophie',
'Kuchinskey',
'[email protected]',
105,
5000000,
60,
DATE '1994-09-20'
);