Wie bekommt man die id der hinzugefügten Zeile in Oracle
Ich brauche die übersetzung eines tsql-Skript aus, um plsql, so etwas wie:
DECLARE @temp_id int
INSERT INTO Table (col1, col2) VALUES (1, 2)
SET @temp_id = @@identity
aber ich habe Schwierigkeiten, etwas zu finden, ähnlich wie Globale variable @@identity
Oracle Experte jemand?
- mögliche Duplikate von Oracle: erstellen Sie eine identity-Spalte?
- BTW, auf dem SQL Server
@@identity
kann nicht geben die richtige Antwort, wenn es Trigger, Feuer einfügen in andere Tabellen. Best-practice-schlägt mitscope_identity()
statt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, Sie haben eine Art trigger zum Auffüllen der primary key-Spalte mit einer Sequenz, und Sie möchten Holen Sie sich den zugewiesenen Wert...
Beachten Sie, dass die RÜCKSENDUNG syntax funktioniert nur mit single-row-inserts.
Die Antwort von Michael Pakhantsov ist nur nutzbar, die in einer single-user-single-tasking-Umgebung.
Die insert-und select-Anweisungen sind getrennte Aussagen!
Was passiert in einer multi-user-multi-Prozess-Umgebung?
Nicht immer Programm dieser Art, nicht einmal darüber nachdenken.
Man braucht eine Atomare operation, das heißt, es wird nicht berührt von task-switching.
Die Antwort von APC wäre:
Wäre es-Ausgang:
Den dbms_output wäre:
Denken Sie daran, Sie können nur diese, die für das einfügen jeweils eine Zeile:
Gibt eine PL/SQL: ORA-00933: SQL-Befehl nicht korrekt beendet, Fehler, auslassen der RÜCKKEHR-id IN temp_id.
In Oracle 12 Sie können mithilfe der identity-Spalte, um etwas ähnliches zu SQL Server und MySql.
dbms_output wäre:
Einen Hinweis Hinzugefügt:
Beim erstellen einer Tabelle mit identity -, eine system-Sequenz generiert wird.
Diese Sequenz wird auch weiterhin existiert, auch nach dem löschen der Tabelle!
Auch der sysdba kann nicht lassen Sie diese Reihenfolge!
Nach dem drop table-Anweisung müssen Sie den purge recyclebin, um Sie zu entfernen.
Müssen Sie die Verwendung von Sequenzen. (http://psoug.org/reference/sequences.html)
SequenceName.NEXTVAL nächsten Wert, sequenceName.CURRVAL - zuletzt verwendete Wert (wie zum Beispiel @@Identity)
INSERT INTO Tabelle (Id, col1, col2) VALUES (Sequenz.NEXTVAL, 1, 2);
WÄHLEN Sie "Sequenz".CURRVAL IN Temp_ID von dual;