sql >> Databasteknik >  >> RDS >> Oracle

ORA-1843:inte en giltig månad vid uppdatering av post

Ett datum har inget format – det lagras internt i databasen som 7-byte (representerar år, månad, dag, timme, minut och sekund) och det är inte förrän vilket användargränssnitt du än använder (t.ex. SQL/Plus, SQL Developer, Java, etc) försöker visa det för dig, användaren, och konverterar det till något du skulle tycka är meningsfullt (vanligtvis en sträng) att datumet har ett format.

Om du tillhandahåller ett formaterat datum till en procedur kommer det att vara en sträng och Oracle kommer att försöka att implicit casta det till ett datum med hjälp av NLS_DATE_FORMAT sessionsparameter:

UPDATE your_table
SET your_date_column = '18-06-14'; -- or equivalently via a bind parameter

Konverteras implicit till

UPDATE your_table
SET your_date_column = TO_DATE(
                         '18-06-14',
                         ( SELECT value
                           FROM   NLS_SESSION_PARAMETERS
                           WHERE  parameter = 'NLS_DATE_FORMAT' )
                       );

Om NLS_DATE_FORMAT inte matchar kommer Oracle att skapa ett undantag (och parametern kan ställas in av varje användare så du bör inte lita på att den är konsekvent - särskilt i internationella organisationer när standarddatumformatet beror på ditt territorium och ditt språk).

Om du uppdaterar värdet använd en DATE bokstavlig och inte en sträng:

UPDATE your_table
SET your_date_column = DATE '2014-06-18';

Eller konvertera uttryckligen strängen och ange formatmodellen:

UPDATE your_table
SET your_date_column = TO_DATE( '18-06-14', 'DD-MM-RR' );

Detsamma gäller för att skicka parametrar till din funktion. Använd antingen en DATE bokstavligt:

BEGIN
  your_procedure(
    p_launch_date => DATE '2014-06-18'
  );
END;
/

eller uttryckligen konvertera strängen till ett datum (och lita inte på implicit konvertering):

BEGIN
  your_procedure(
    p_launch_date => TO_DATE( '18-06-14', 'DD-MM-RR' )
  );
END;
/



  1. Effektivt avgöra om ett företag är öppet eller inte baserat på butikens öppettider

  2. Oracle Forms 6i kraschar med 0xC0000005 vid start efter installation av patch 19

  3. MySQL-val verkar väldigt långsamt men kan inte tänka på hur man ska förbättra?

  4. Stöder PostgreSQL transparent komprimering av tabeller (fragment)?