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

10 浏览
0 Comments

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

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

0
0 Comments

问题的出现原因:调用存储过程innerproc中的OUT参数无法在调用它的存储过程outerproc中获取到值。

解决方法:将innerproc存储过程的最后一行代码修改为SELECT LAST_INSERT_ID() INTO @param1;,并在outerproc存储过程中使用SELECT @param1 INTO variableinouterproc;来获取innerproc存储过程的返回值。

整理成一篇文章如下:

在MySQL中调用存储过程时,有时候需要在一个存储过程中调用另一个存储过程。然而,在调用存储过程innerproc的存储过程outerproc中,我们发现无法获取到innerproc的返回值。

我们先来看一下存储过程innerproc的代码:

CREATE PROCEDURE innerproc(OUT param1 INT)
BEGIN
    INSERT INTO sometable;
    SELECT LAST_INSERT_ID() INTO param1;
END

存储过程innerproc的作用是向表sometable插入一条记录,并将最后插入的记录的ID保存到OUT参数param1中。

接下来,我们来看一下存储过程outerproc的代码:

CREATE PROCEDURE outerproc()
BEGIN
    CALL innerproc();
    -- 无法获取到innerproc的返回值
    SELECT INTO variableinouterproc FROM dual;
END

存储过程outerproc中,我们调用了存储过程innerproc,但是无法通过调用innerproc来获取到它的返回值。

那么,该问题的解决方法是什么呢?

根据问题中提到的OUT参数,我们可以将innerproc存储过程的最后一行代码修改为SELECT LAST_INSERT_ID() INTO @param1;,然后在outerproc存储过程中使用SELECT @param1 INTO variableinouterproc;来获取innerproc存储过程的返回值。

修改后的innerproc存储过程代码如下:

CREATE PROCEDURE innerproc(OUT param1 INT)
BEGIN
    INSERT INTO sometable;
    SELECT LAST_INSERT_ID() INTO @param1;
END

修改后的outerproc存储过程代码如下:

CREATE PROCEDURE outerproc()
BEGIN
    CALL innerproc();
    -- 获取innerproc的返回值
    SELECT @param1 INTO variableinouterproc FROM dual;
END

通过以上修改,我们可以在存储过程outerproc中成功获取到存储过程innerproc的返回值。

总结起来,我们在使用MySQL中的存储过程时,如果需要在一个存储过程中调用另一个存储过程并获取其返回值,可以使用OUT参数和SELECT语句来实现。这样,我们就能够灵活地在存储过程中获取需要的数据了。

0
0 Comments

问题出现的原因:在MySQL中调用存储过程中的另一个存储过程时,需要使用CALL语句,但如果想要获取最后插入的ID,需要使用LAST_INSERT_ID()函数。

解决方法:可以使用以下方法解决该问题。

首先,创建一个animals表和两个存储过程sp1和sp2。sp1用于向animals表插入一条记录,sp2中调用sp1并且返回最后插入的ID。

然后,在sp2中使用CALL语句调用sp1,并在调用之后使用SELECT LAST_INSERT_ID()语句来获取最后插入的ID。

最后,调用sp2即可获取最后插入的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;

此外,可以直接使用SELECT LAST_INSERT_ID()语句来获取最后插入的ID,而不需要使用OUT参数。

如果想要在同一个函数中返回或检索最后插入的ID,可以多次调用SELECT LAST_INSERT_ID()语句。如果想要返回它,可以使用函数或OUT参数,两种方法都可以实现目标。

0