2009-07-17 12 views
9

Abbiamo una tabella con una chiave primaria che viene popolata sull'inserto da un trigger sul tavolo - il trigger ottiene il numero di sequenza successivo da una sequenza creata per la tabella e lo utilizza per il valore della chiave sull'inserto. Ora vorremmo essere in grado di restituire quel valore nella nostra procedura di inserimento (PL \ SQL), simile a selezionare @@ scope_identity in SQL Server. Sono stato googliling tutto il giorno e praticamente non ho inventato niente - qualcuno ha avuto successo con questo prima?Oracle - restituisce il nuovo valore chiave inserito

Grazie

risposta

19

Non so se funziona con i trigger, ma la clausola RETURNING può essere quello che stai cercando:

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

Sì, questo sembra interessante e farò un tentativo. –

+0

Ha funzionato come un campione con il grilletto! Assolutamente ottengo sempre il nuovo valore chiave creato dal trigger. Grazie. –

+0

Mi ha dato un errore dicendo "Parola chiave mancante" ... ma stavo cercando di farlo con PHP. –

0

penso che siete alla ricerca di una dichiarazione Callable. Ecco lo javadoc se stai provando ad andare da Java.

+0

Che avrebbe funzionato bene se si potesse popolare il parametro di uscita con la chiave appena creata in il PL \ SQL - che è fondamentalmente quello che sto chiedendo nella domanda. La chiave è popolata nel trigger di inserimento - ora come faccio ad afferrarla in una procedura di inserimento degli inserimenti? –

0

perché non solo restituire the_sequence.currval?

+0

Sfortunatamente - la sequenza è usata da più di una tabella. –

Problemi correlati