Oracle
 sql >> Database >  >> RDS >> Oracle

Perché non posso inserire questa data in una tabella usando sql?

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',
  '[email protected]',
  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',
  '[email protected]',
  105,
  5000000,
  60,
  DATE '1994-09-20'
);