2012-06-12 48 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);

IDを取得するには、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

LAST INSERTED IDを返す場合、または同じ関数で使用できる場合はそれを取得したい場合はどうすればよいですか? –

関連する問題