2009-07-17 9 views
9

Wir haben eine Tabelle mit einem Primärschlüssel, der beim Einfügen durch einen Trigger für die Tabelle gefüllt wird - der Trigger erhält die nächste Sequenznummer aus einer Sequenz, die wir für die Tabelle erstellt haben Wert des Schlüssels beim Einfügen. Jetzt möchten wir in der Lage sein, diesen Wert in unserer Einfügeprozedur (PL \ SQL) zurückzugeben, ähnlich wie @@ scope_identity in SQL Server auswählen. Ich habe den ganzen Tag gegoogelt und mir nichts einfallen lassen - damit war schon mal jemand erfolgreich?Oracle - gibt den neu eingefügten Schlüsselwert zurück

Danke

Antwort

19

Ich weiß nicht, ob es mit Trigger funktioniert, aber die RETURNING-Klausel kann sein, was Sie suchen:

INSERT INTO my_table (col_1, col_2) 
    VALUES ('foo', 'bar') 
    RETURNING pk_id INTO my_variable; 
+0

Ja - das sieht interessant aus und ich werde es versuchen. –

+0

Arbeitete wie ein Champion mit dem Auslöser! Ich bekomme absolut den neuen Schlüsselwert, der durch den Trigger erzeugt wird, jedes Mal zurück. Vielen Dank. –

+0

Gab mir einen Fehler, der "fehlendes Schlüsselwort" sagte ... aber versuchte, dies mit PHP zu tun. –

0

Ich denke, Sie suchen nach einer Callable-Anweisung. Hier ist javadoc, wenn Sie versuchen, es von Java zu bekommen.

+0

Das fein funktionieren würde, wenn wir den Ausgangsparameter mit dem neu erstellten Schlüssel bevölkern könnten in das PL \ SQL - was ich grundsätzlich in der Frage stelle. Der Schlüssel wird im Insert-Trigger aufgefüllt. Wie kann ich das in einer gespeicherten Insert-Prozedur erfassen? –

0

Warum nicht einfach the_sequence.currval?

+0

Leider - die Sequenz wird von mehr als einer Tabelle verwendet. –

Verwandte Themen