在MySQL中的存储过程中调用存储过程

Mik*_*ynn 36 mysql stored-procedures

我无法在任何地方找到这个答案,但您可以从MySQL中的另一个存储过程调用存储过程吗?我想获取Identity Value并在父存储过程中使用它.我们不能再使用FUNCTIONS了!

Aha*_*a M 66

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
Run Code Online (Sandbox Code Playgroud)

OUT 参数应该可以帮助您将值返回到调用过程.基于此,解决方案必须是这样的.

  • 你用完了,你认为这比做 LAST_INSERT_ID() 更好吗? (2认同)

dcp*_*dcp 9

要调用另一个过程,请使用CALL:ex:Call SP1(parm1, parm2);

要获得身份,您是否尝试检出LAST_INSERT_ID() ; 你会SELECT LAST_INSERT_ID()在你的SP电话之后做一些事情.

这是一个完整的,经过测试的例子:

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;
Run Code Online (Sandbox Code Playgroud)