Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Warum kann ich dieses Datum nicht mit SQL in eine Tabelle eingeben?

Oracle wird ein implizites TO_DATE ausführen auf Nicht-Datumsliterale, wenn sie in ein DATE eingefügt werden Spalte mit dem Wert von NLS_DATE_FORMAT als Formatmaske. Wenn das Nicht-Datumsliteral mit diesem Format übereinstimmt, funktioniert es (und wenn nicht, dann nicht) - wenn jedoch NLS_DATE_FORMAT jemals geändert wird, wird es sofort kaputt gehen (das Debuggen kann sehr mühsam sein, da der Code, der funktioniert hat, nicht funktioniert, aber niemand den Code geändert hat).

Sie können Ihr aktuelles NLS_DATE_FORMAT herausfinden mit der Abfrage:

SELECT VALUE
FROM   NLS_SESSION_PARAMETERS
WHERE  PARAMETER = 'NLS_DATE_FORMAT';

Es ist besser, ausdrücklich TO_DATE zu verwenden mit der richtigen Formatmaske oder um ein ANSI-Datumsliteral zu verwenden (d. h. 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' )
);

Oder unter Verwendung des gebietsschema-/sprachunabhängigen ANSI-Formats:

insert into employees_table
values(
  05,
  'Sophie',
  'Kuchinskey',
  '[email protected]',
  105,
  5000000,
  60,
  DATE '1994-09-20'
);