2012-06-12 216 views

回答

45
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参数应该可以帮助您获得的值回调用。

+0

你用完了,你觉得这样比LAST_INSERT_ID()更好吗? –

+0

如果它是一个函数,您将从函数中返回LAST_INSERT_ID作为返回值。此解决方案必须提供相同的值,以便PROCEDURE等同于函数 –

+0

另一个答案表示我可以在不使用OUT的情况下使用LAST_INSERT_ID()? –

6

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

要获得认同,你尝试检查出LAST_INSERT_ID();在您的SP呼叫后,您会执行类似SELECT LAST_INSERT_ID()的操作。

这里有一个完整的,测试的例子:procedure.Based上,该解决方案必须是这样的

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; 
+0

您正在使用LAST_INSERT_ID(),您认为这样做会更好吗? –

+0

@Mike Flynn-OUT参数并不是真的需要,你可以通过调用select last_insert_id()来获得最后插入的id。 – dcp

+0

如果我想返回最后一个插入的ID,或者如果它在相同的函数中可用,则检索它? –