# ID des letzten eingefügten Werts ermitteln (Oracle)



## Wookiehuhn (27. Feb 2008)

Hi,
ich habe eine Oracle-DB mit einer Tabelle test und folgendem Aufbau:

ID - Datum - Freitext

Das Feld ID (int, Primärschlüssel) wurde vorher auf AutoWert gesetzt. Wenn ich einen Insert-Befehl absetze, schreibe ich also nur 


```
INSERT INTO test(Datum, Freitext) VALUES ...
```

und das Feld ID erhält automatisch den nächsten verfügbaren Wert.

Ich möchte nun in Insert-Statement über Java absetzen:


```
Connection conn = DBUtils.getConnection();
Statement stat1 = conn.createStatement();
int anzahl = stat1.executeUpdate("INSERT INTO test(Datum, Freitext) VALUES ('2008-02-27', 'test')");
conn.commit();
conn.close();
```

So weit, so gut, der Datensatz wird eingefügt. Da ich ihn bei bestimmten Bedingungen noch einmal ansprechen muß, hätte ich jetzt gerne den Wert, der in dem Feld ID automatisch eingefügt wurde. Geht das in Java? Notfalls muß ich einen Befehl wie "SELECT MAX(ID) FROM test WHERE Freitext=..." absetzen, auf den ich aber gerne verzichten würde.

Wer hat eine Idee?

Viele Grüße,
Julia


----------



## The_S (27. Feb 2008)

Evtl. unterstützt Oracle Statement#getGeneratedKeys!?


----------



## Wookiehuhn (27. Feb 2008)

Hi,
leider nein - ich kriege die Fehlermeldung "Nicht unterstützte Funktion"... :-(


----------



## VoiDee (13. Mai 2008)

Seit wann gibt es bei Oracle einen "AutoWert" ?

Ich hab jetzt schon seit 8 Jahren nicht mehr mit Java auf eine Ora-DB zugegriffen, aber warum benutzt man ein


```
executeUpdate(...);
```

wenn man ein INSERT-Statement absendet? Ist das so richtig.


Wenn man das Problem unbedingt lösen möchte, könnte man einen INSERT-Trigger auf die Tabelle legen, die den nächsten Sequenzenwert ausliest und in einer weiteren Tabelle vorhält. Oder der Trigger ruft eine Package-Funktion auf, die den nächsten Sequencen-Wert ermittelt und in einer öffentlichen Package Funktion zur Verfügung stellt (getLastID())

Man könnte natürlich auch die sehr unsaubere Methode anwenden und mit einem SELECT max(ID) LAST_INSERTED_ID from <TABLE> die ID ermitteln.


----------



## maki (13. Mai 2008)

Bei Oracle steht die nächste Sequence schon vor dem einfügen fest, glaube mich dunkel an etwas mit name_der_sequenz.NEXTVAL zu erinnern.


----------

