Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL的存储过程中调用存储过程_Mysql_Stored Procedures - Fatal编程技术网

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

在MySQL的存储过程中调用存储过程,mysql,stored-procedures,Mysql,Stored Procedures,我在任何地方都找不到这个答案,但是你能从MySQL中的另一个存储过程调用一个存储过程吗?我想取回标识值并在父存储过程中使用它。我们不能再使用函数了 要调用另一个过程,请使用: 例如:调用SP1(parm1,parm2) 为了获得身份,您是否尝试过退房;您可以在SP调用后执行类似于选择上次插入\u ID()的操作 下面是一个完整的、经过测试的示例: DELIMITER $$ CREATE TABLE animals ( id MEDIUMINT NOT NULL AUTO_INCREM

我在任何地方都找不到这个答案,但是你能从MySQL中的另一个存储过程调用一个存储过程吗?我想取回标识值并在父存储过程中使用它。我们不能再使用函数了

要调用另一个过程,请使用: 例如:
调用SP1(parm1,parm2)

为了获得身份,您是否尝试过退房;您可以在SP调用后执行类似于
选择上次插入\u ID()
的操作

下面是一个完整的、经过测试的示例:

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;

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

您正在使用OUT,您认为这比使用LAST\u INSERT\u ID()更好吗?如果是函数,您将从函数返回最后一个\u INSERT\u ID作为返回值。此解决方案必须提供相同的返回值,以便该过程与函数等效。另一个答案说我可以使用最后一个\u INSERT\u ID(),而无需输出?@Mike Flynn-您自己尝试过我的示例吗?您可以多次调用sp2,每次都会返回下一个递增的id。我知道,因为我测试过:)。还没有,但我会,也会在我今天这么做后,将你的答案标记为正确。你使用的是LAST_INSERT_ID(),你认为这样做比外出更好吗?@Mike Flynn-out参数不是真的需要,你只需调用select LAST_INSERT_ID()即可获得最后插入的ID.如果我想返回最后插入的ID,或者如果它在同一个函数中可用,则检索它,该怎么办?@Mike Flynn-您可以调用select LAST_insert_ID();多次,在执行插入的SP内或其他位置。如果要返回它,可以使用函数或OUT参数。任何一种方法都应该有效。
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