存儲過程傳參:存儲過程的括號裡,可以聲明參數。 語法是 create procedure p([in/out/inout] 參數名 參數類型 ..)
in :給參數傳入值,設定的參數就得到瞭值
out:模式設定的參數隻能在過程體內部賦值,表示該參數可以將某個值傳遞回調用他的過程(在存儲過程內部,該參數初始值為 null,無論調用者是否給存儲過程參數設置值)
inout:調用者還可以通過 inout 參數傳遞值給存儲過程,也可以從存儲過程內部傳值給調用者
如果僅僅想把數據傳給 MySQL 存儲過程,那就使用“in” 類型參數;
如果僅僅從 MySQL 存儲過程返回值,那就使用“out” 類型參數;
如果需要把數據傳給 MySQL 存儲過程,還要經過一些計算後再傳回給我們,此時,要使用“inout” 類型參數。
MySQL 存儲過程參數如果不顯式指定"in"、"out"、"inout",則默認為"in"。
實例一:存儲過程傳參 in
DELIMITER $$ CREATE PROCEDURE p1(IN num INT) BEGIN DECLARE i INT DEFAULT 0; DECLARE total INT DEFAULT 0; WHILE i<=num DO SET total := i + total; SET i := i+1; END WHILE; SELECT total; END$$
實例二:存儲過程傳參 out
CREATE PROCEDURE p2(OUT num INT) BEGIN SELECT num AS num_1; IF (num IS NOT NULL) THEN SET num = num + 1; SELECT num AS num_2; ELSE SELECT 1 INTO num; END IF; SELECT num AS num_3; END$$ SET @num = 10$$ CALL p2(@num)$$ SELECT @num AS num_out$$
實例三:存儲過程傳參 inout
CREATE PROCEDURE p3(INOUT age INT) BEGIN SET age := age + 20; END$$ set @currage =18$$ call p3(@currage)$$ select @currage$$