Non riesco a trovare questa risposta da nessuna parte, ma è possibile chiamare una stored procedure da un'altra stored procedure in MySQL? Voglio recuperare il valore dell'identità e usarlo nella stored procedure genitore. Non possiamo più usare FUNZIONI!Chiamare una stored procedure in una stored procedure in MySQL
risposta
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
parametri dovrebbero aiutarvi a ottenere i valori di nuovo alla chiamata procedure.Based sul fatto che la soluzione deve essere qualcosa di simile.
Per chiamare un altro procedimento, utilizzare CALL: es: Call SP1(parm1, parm2);
Per ottenere l'identità, non si tenta di verificare LAST_INSERT_ID(); Dovresti fare qualcosa come SELECT LAST_INSERT_ID()
dopo la tua chiamata SP.
Ecco un completo, ad esempio testato:
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;
Stai utilizzando LAST_INSERT_ID(), pensi che sia meglio farlo? –
@Mike Il parametro Flynn- OUT non è realmente necessario, è possibile ottenere l'ultimo ID inserito semplicemente chiamando select last_insert_id(). – dcp
e se si desidera restituire l'ULTIMO INSERIMENTO ID o recuperarlo se disponibile nella stessa funzione? –
Stai usando, pensi che sia meglio fare LAST_INSERT_ID()? –
Se fosse una funzione, restituiresti LAST_INSERT_ID dalla funzione come VALORE DI RITORNO. Questa soluzione deve fornire lo stesso in modo che PROCEDURE sia equivalente alla funzione –
L'altra risposta dice che posso usare LAST_INSERT_ID() senza OUT? –