# INSERT DATE in Oracle-DB



## Gas (17. Apr 2010)

Hallo,
ich versuche seit Stunden ein simples SQL-Statement in JDBC abzusetzen, bekomme aber immer die Meldung:
ORA-00932: Inkonsistente Datentypen: DATE erwartet, NUMBER erhalten

Der QueryString sieht (momentan) so aus: 
	
	
	
	





```
"insert into tabelle values(4, to_date('12/03/2006','dd/mm/yy'))";
```

Müsste aber mittlerweile jede denkbare Date-Kombination (auch ohne die "to_date-Funktion", sowie mit/ohne Simikolon) durch haben.

Im "SQL-Befehlsfenster" wird mit: insert into flug values(4, to_date('160710','ddmmyy')); wunderbar eine Zeile eingefügt...

In der Datenbank steht nur ein Datum (OHNE Zeit) vom Format tt.mm.jj


----------



## gman (17. Apr 2010)

Hi,

fehlen da nicht noch zwei Ypsilon, damit das Jahr vierstellig geparst wird?


```
"insert into tabelle values(4, to_date('12/03/2006','dd/mm/yyyy'))";
```

Aber eigentlich müsste dann eine andere Fehlermeldung kommen.


----------



## Gas (17. Apr 2010)

Das war es auch nicht bzw. auch die Kombination hatte ich schon durch...aber danke für die Antwort!
Endlich mal was positives...hab glaube selten so oft auf den Tisch gehauen vor Verzweiflung...will doch "nur" ein Datum "inserten"... 
AAAAHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHRRRGGHHHHHHH


----------



## XHelp (17. Apr 2010)

Wie sieht die Tabelle dazu aus?


----------



## Gas (17. Apr 2010)

create table Tabelle 
(ID integer not null,
  Datum date not null)

Super simpel, nur 2 Spalten, einmal nen Zahlenwert und halt das verflixte Datum...in der Tabelle selbst sind nur 5 Zeilen (Eine 6te krieg ich ja mittels insert-Statement in JDBC nicht :s)

1    12.03.08
2    24.05.10
3    16.09.09

Weiß nicht ob das reicht?


----------



## Gas (17. Apr 2010)

Ansonsten hier noch der Java-Code: (hab das auf´s wesentliche reduziert...man gehe also davon aus, dass die Connection funzt und JDBC-Treiber geladen sind.....)


```
String query="insert into Tabelle values(4, to_date('01/01/81','ddmmyy'))";

Statement stmt = connection.createStatement();

stmt.executeUpdate(query);
```


----------



## XHelp (17. Apr 2010)

Also der JavaCode müsste nicht so ganz richtig sein, denn das Format von to_date ist falsch:

```
to_date('01/01/81','DD/MM/YY')
```


----------



## Gas (18. Apr 2010)

Ich weiß zwar nicht, ob man das als Verbesserung ansehen kann, aber mit:

TO_DATE( '02-12-06', 'DD-MON-YY' ) oder
TO_DATE( '12-12-12', 'DD-MON-RR' ) bekomme ich jetzt "immerhin" die Fehlermeldung:

ORA-01843: Kein gültiger Monat

Warum 12 kein gültiger Monat ist versteh ich allerdings auch noch nicht so ganz...(05 ist auch keiner, may, april, july......auch nicht) 

Will doch nur ein Datum einfügen... :s


----------



## Gas (18. Apr 2010)

Achso...das Format müsste passen...da kann man sich ja eine Menge selbst basteln...

(Dazu fand ich die Seite ganz gut: Oracle Dates and Times)

Funzt trotzdem nicht...


----------



## Gas (18. Apr 2010)

Komisch...
Hab grad Eclipse neu gestartet, den (vorhin nicht funktionierenden) Code laufen lassen und les auf der Console auf einmal: 
Zeile eingefügt! 
Damit lautet der aktuelle Kandidat für das Einfügen von Datumsangaben in Oracle:

TO_DATE( '12.03.06', 'DD/MM/RR' )

Aber irgendwie gibt es da noch inkonsistenzen zwischen der Datenbank-Homepage und dem SQL-Befehlszeilentool...im Tool lösche ich die Zeile, in der Homepage steht sie noch drin...naja...meine Primärfrage wurde beantwortet, für alle die auch zufällig grad mit Oracle und "Date-Formaten" Spaß haben...


----------



## gman (18. Apr 2010)

Beim Löschen der Zeile eventuell das "Commit" vergessen?

Irgendwie ist das wirklich komisch, mein "Standard"-Format wäre:


```
String query="insert into Tabelle values(4, to_date('28.02.2010', 'dd.mm.yyyy'))";
```

Nur komme ich dann immer beim SimpleDateFormat durcheinander, bei dem ist das
entsprechende Format "dd.MM.yyyy".


----------



## Eminent (22. Apr 2010)

Gas hat gesagt.:


> Komisch...
> Hab grad Eclipse neu gestartet, den (vorhin nicht funktionierenden) Code laufen lassen und les auf der Console auf einmal:
> Zeile eingefügt!
> Damit lautet der aktuelle Kandidat für das Einfügen von Datumsangaben in Oracle:
> ...



Da sind keine Daten inkonsistent. Änderungen die du in einer Oracle-Session machst sind erstmal nur temporär für diese Session (sprich eine zweite Session sieht die Änderungen nicht). Die temporären Änderungen einer Session werden erst "gepeichert" (und damit für andere sichtbar), wenn du einen COMMIT absetzt, deine Java-DB-Verbindung AUTOCOMMIT aktiviert hat oder du die Session trennst.

Was deine Probleme mit dem INSERT des Dates angeht kann ich offen gestanden auch nicht so nachvollziehen. Ich denke du musst da irgendwo immer das Datumsformat falsch angegeben haben:

SQL> create table test (nummer number(2), datum date);
Tabelle wurde angelegt.
SQL> insert into test values (1,to_date('12.12.12','dd.mm.yy'));
1 Zeile wurde erstellt.
SQL> insert into test values (1,to_date('12/12/12','dd/mm/yy'));
1 Zeile wurde erstellt.
SQL> insert into test values (1,to_date('12/03/2006','dd/mm/yyyy'));
1 Zeile wurde erstellt.

Funktioniert alles wunderbar, so lange man zum entsprechenden Datumsformat auch das richtige Format angibt.


----------

