sql >> Databasteknik >  >> RDS >> Oracle

Liquibase-skriptet returnerar ORA-01843:inte en giltig månad

'02.01.15 12:00:00' är inte ett datum det är en sträng; om du försöker infoga den i en DATE datatyp kolumn så kommer Oracle att försöka casta den till ett datum med motsvarande:

SELECT TO_DATE(
         '02.01.15 12:00:00',
         ( SELECT value FROM NLS_SESSION_PARAMETERS WHERE parameter = 'NLS_DATE_FORMAT' )
       ) as CHANGED
FROM   DUAL

Så om din NLS_DATE_FORMAT sessionsparametern matchar inte formatet för din sträng '02.01.15 12:00:00' då kommer det att skapa ett undantag - och det här är vad som verkar hända eftersom du får ORA-01843: not a valid month .

Den bästa lösningen är att modifiera ditt skript för att explicit casta strängen till ett datum:

MERGE INTO A config
USING (
  SELECT 100 as id,
         TO_DATE( '02.01.15 12:00:00', 'DD.MM.YY HH24:MI:SS' ) as CHANGED,
         0 as DELETED,
         1 as B
  FROM   DUAL
) src ON (src.id = config.id)
WHEN NOT MATCHED THEN 
  INSERT(id,CHANGED, DELETED, B) VALUES(src.id, src.CHANGED, src.DELETED, src.B)
WHEN MATCHED THEN
  UPDATE SET config.B = src.B;

eller för att använda en bokstavlig tidsstämpel:TIMESTAMP '2015-01-02 12:00:00'

Men du kan också skapa en inloggningsutlösare för att ändra NLS_DATE_FORMAT sessionsparameter. Linda utlösaren runt den här koden:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD.MM.YY HH24:MI:SS';

Detta kommer dock att ändra datumformatet som används i alla implicita omvandlingar från sträng till datum (och vice versa) så kan bryta andra frågor som också är beroende av sådana implicita omvandlingar. Dessutom kan varje användare ändra sina sessionsparametrar när som helst så att ställa in denna standard vid inloggning förlitar sig på att de aldrig ändrar det under sin session.

[TL;DR] Fixa ditt skript så att det inte använder implicita omvandlingar mellan datatyper snarare än att ändra formatmodellen som används för implicita omvandlingar.



  1. Hur man fyller i zontabeller i mysql-databasen i ubuntu med xampp

  2. Bli av med dubbla citattecken med SQLalchemy för PostgreSQL

  3. Dynamiska kolumner i SQL Select-sats, behåller odefinierade värden

  4. gör en favoritlista över jobb med PHP och MYSQL