2009-07-17 7 views
9

Tenemos una tabla con una clave principal que se llena en insertar por un desencadenante en la tabla - el desencadenante obtiene el siguiente número de secuencia de una secuencia que creamos para la tabla y lo utiliza para el valor de la clave en la inserción. Ahora nos gustaría poder devolver ese valor en nuestro procedimiento de inserción (PL \ SQL), similar a seleccionar @@ scope_identity en SQL Server. He estado buscando en Google todo el día y básicamente no he encontrado nada, ¿alguien ha tenido éxito con esto antes?Oracle - Devuelve el valor de clave recién insertado

Gracias

Respuesta

19

No sé si funciona con los desencadenantes, pero la cláusula que regresa puede ser lo que usted está buscando:

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

Sí, esto parece interesante y lo intentaré. –

+0

¡Trabajó como un campeón con el gatillo! Absolutamente obtengo el nuevo valor de clave creado por el disparador cada vez. Gracias. –

+0

Me dio un error diciendo "missing keyword" ... pero estaba tratando de hacer esto con PHP. –

0

Creo que está buscando una Declaración de llamamiento. Aquí está javadoc si está tratando de llegar desde Java.

+0

Eso funcionaría bien si podríamos poblar el parámetro de salida con la clave recién creada en el PL \ SQL - que es básicamente lo que estoy preguntando en la pregunta. La clave se rellena en el desencadenador de inserción: ahora, ¿cómo atrapo eso en un procedimiento insertado almacenado? –

0

¿por qué no simplemente devuelve the_sequence.currval?

+0

Desafortunadamente, la secuencia es utilizada por más de una tabla. –

Cuestiones relacionadas