2012-06-12 34 views

Respuesta

45
CREATE PROCEDURE innerproc(OUT param1 INT) 
BEGIN 
insert into sometable; 
SELECT LAST_INSERT_ID() into param1 ; 
END 
----------------------------------- 
CREATE PROCEDURE outerproc() 
BEGIN 
CALL innerproc(@a); 
// @a gives you the result of innerproc 
SELECT @a INTO variableinouterproc FROM dual; 
END 

OUT parámetros que deben ayudar a obtener los valores de nuevo a la llamada procedure.Based en que la solución debe ser algo como esto.

+0

Estás usando, ¿crees que esto es mejor que hacer LAST_INSERT_ID()? –

+0

Si fuera una función, devolverá LAST_INSERT_ID de la función como VALOR DEVUELTO. Esta solución debe proporcionar la misma para que el PROCEDIMIENTO sea equivalente a la función –

+0

. La otra respuesta dice que puedo usar LAST_INSERT_ID() sin OUT? –

6

Para llamar a otro procedimiento, utilice CALL: ejemplo: Call SP1(parm1, parm2);

Para obtener la identidad, ¿trató de retirar LAST_INSERT_ID(); Haría algo como SELECT LAST_INSERT_ID() después de su llamada al SP.

Aquí hay una, ejemplo probado completo:

DELIMITER $$ 

CREATE TABLE animals (
    id MEDIUMINT NOT NULL AUTO_INCREMENT, 
    name CHAR(30) NOT NULL, 
    PRIMARY KEY (id) 
) $$ 

CREATE PROCEDURE sp1() 
BEGIN 
    insert into animals (name) values ('bear'); 
END $$ 

CREATE PROCEDURE sp2() 
BEGIN 
    call sp1; 
    select last_insert_id(); 
END $$ 

call sp2; 
+0

Está utilizando LAST_INSERT_ID(), ¿cree que esto es mejor que hacerlo? –

+0

@Mike El parámetro Flynn-OUT no es realmente necesario, puede obtener la última identificación insertada simplemente llamando a seleccionar last_insert_id(). – dcp

+0

¿Qué sucede si deseo devolver la ÚLTIMA IDENTIFICACIÓN INSERTADA o recuperarla si está disponible en la misma función? –

Cuestiones relacionadas