Oracle eseguirà un implicito TO_DATE su valori letterali non di data quando li inserisci in un DATE colonna utilizzando il valore di NLS_DATE_FORMAT come maschera di formato. Se il valore letterale non di data corrisponde a questo formato, funzionerà (e in caso contrario non funzionerà), tuttavia, se NLS_DATE_FORMAT viene mai modificato, quindi si interromperà immediatamente (qualsiasi problema per il debug poiché il codice che stava funzionando non funzionerà, ma nessuno avrà cambiato il codice).
Puoi scoprire il tuo attuale NLS_DATE_FORMAT con la domanda:
SELECT VALUE
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';
È meglio usare esplicitamente TO_DATE con la maschera di formato corretta o per utilizzare una data letterale ANSI (ad esempio DATE '2014-12-01' ).
insert into employees_table
values(
05,
'Sophie',
'Kuchinskey',
'example@sqldat.com',
105,
5000000,
60,
TO_DATE( '20-sep-1994', 'DD-Mon-YYYY' )
);
Oppure, utilizzando il formato ANSI indipendente dalla lingua/località:
insert into employees_table
values(
05,
'Sophie',
'Kuchinskey',
'example@sqldat.com',
105,
5000000,
60,
DATE '1994-09-20'
);