web-dev-qa-db-fra.com

Appeler une procédure stockée dans une procédure stockée dans MySQL

Je ne trouve cette réponse nulle part, mais pouvez-vous appeler une procédure stockée à partir d'une autre procédure stockée dans MySQL? Je veux récupérer la valeur d'identité et l'utiliser dans la procédure stockée parent. Nous ne pouvons plus utiliser les FONCTIONS!

35
Mike Flynn
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 Les paramètres devraient vous aider à récupérer les valeurs dans la procédure d'appel. En fonction de cela, la solution doit être quelque chose comme ça.

62
Ahamed Mustafa M

Pour appeler une autre procédure, utilisez [[# # ~] appelez [~ # ~] : ex: Call SP1(parm1, parm2);

Pour obtenir l'identité, avez-vous essayé de vérifier LAST_INSERT_ID () ; Vous feriez quelque chose comme SELECT LAST_INSERT_ID() après votre appel SP.

Voici un exemple complet et testé:

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;
9
dcp