46

この回答はどこにも見つかりませんが、MySQL の別のストアド プロシージャからストアド プロシージャを呼び出すことはできますか? ID 値を取得して、親のストアド プロシージャで使用したいと考えています。FUNCTIONS はもう使えません!

4

2 に答える 2

80
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パラメータは、呼び出し元のプロシージャに値を戻すのに役立ちます。それに基づいて、ソリューションは次のようになります。

于 2012-06-12T16:34:56.203 に答える
15

別のプロシージャを呼び出すには、CALLを使用します: ex:Call SP1(parm1, parm2);

ID を取得するために、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;
于 2012-06-12T16:31:39.990 に答える