'04/04/2012 13:35 PM'
non è una data - è una stringa.
Oracle eseguirà un implicito TO_DATE( string_value, format_mask )
su valori letterali non di data quando li inserisci in un DATE
colonna utilizzando il valore di NLS_DATE_FORMAT
parametro di sessione come maschera di formato (nota:questo è un parametro di sessione e appartiene al client; non è un'impostazione globale ). 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/ISO (ad esempio DATE '2012-04-04'
o TIMESTAMP '2012-04-04 13:35'
).
Puoi fare:
INSERT INTO STORE ( id, opening_time )
VALUES( 1, TO_DATE( '04/04/2012 13:35', 'DD/MM/YYYY HH24:MI' );
(non è necessario il AM/PM
poiché la componente dell'ora è già impostata su 24 ore)
o
INSERT INTO STORE ( id, opening_time )
VALUES( 1, TIMESTAMP '2012-04-04 13:35:00' );
(usando il valore letterale del timestamp ANSI/ISO che Oracle convertirà implicitamente in una data)