2012-06-12 12 views

cevap

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 parametreleri geri arama değerleri elde etmede size yardımcı olacaktır:

İşte tam test örnek.

+0

Kullanıyorsunuz, bunun daha iyi olduğunu düşünüyor musunuz LAST_INSERT_ID()? –

+0

Bir işlev olsaydı, LAST_INSERT_ID işlevini RETURN VALUE olarak döndürürdünüz. Bu çözüm, PROSEDÜR'ün –

+0

işlevine eşdeğer olması için aynı şeyi sağlamalıdır. Diğer yanıt, OUT olmadan LAST_INSERT_ID() kullanabileceğimi söylüyor? –

6

başka yordamı çağırmak için kullanın CALL: örn: Call SP1(parm1, parm2);

kimliğini almak için, LAST_INSERT_ID() kontrol deneyin yaptı; SP aramanızdan sonra SELECT LAST_INSERT_ID() gibi bir şey yaparsınız. Solüsyon böyle bir şey olmalı bu konuda 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() kullanıyorsunuz, bunun daha iyi olduğunu düşünüyor musunuz? –

+0

@Mike Flynn- OUT parametresi gerçekten gerekli değil, sadece son_insert_id() öğesini seçerek en son eklenen kimliği alabilirsiniz. – dcp

+0

LAST INSERTED ID'yi iade etmek veya aynı işlevde mevcutsa onu almak istersek ne olur? –

İlgili konular