2012-06-12 71 views

Trả lời

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 thông số sẽ giúp bạn trong việc có được các giá trị trở lại sự kêu gọi procedure.Based trên rằng giải pháp phải được một cái gì đó như thế này.

+0

Bạn đang sử dụng hết, bạn có nghĩ rằng điều này là tốt hơn sau đó thực hiện LAST_INSERT_ID()? –

+0

Nếu đó là một hàm, bạn sẽ trả về LAST_INSERT_ID từ hàm là RETURN VALUE.Giải pháp này phải cung cấp giống nhau để PROCEDURE tương đương với hàm –

+0

Câu trả lời khác cho biết tôi có thể sử dụng LAST_INSERT_ID() mà không cần OUT? –

6

Để gọi thủ tục khác, sử dụng CALL: ví dụ: Call SP1(parm1, parm2);

Để có được danh tính, bạn đã thử kiểm tra ra LAST_INSERT_ID(); Bạn sẽ làm một cái gì đó như SELECT LAST_INSERT_ID() sau cuộc gọi SP của bạn.

Dưới đây là một hoàn chỉnh, kiểm tra ví dụ:

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

Bạn đang sử dụng LAST_INSERT_ID(), bạn có nghĩ rằng điều này tốt hơn không? –

+0

@Mike Flynn- OUT tham số không thực sự cần thiết, bạn có thể lấy id được chèn cuối cùng bằng cách chỉ cần gọi select last_insert_id(). – dcp

+0

điều gì sẽ xảy ra nếu tôi muốn trả lại ID LAST INSERTED, hoặc lấy nó nếu nó có sẵn trong cùng một chức năng? –

Các vấn đề liên quan