2012-06-12 294 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,或者如果它在相同的函數中可用,則檢索它? –