存儲過程傳參:存儲過程的括号裡,可以聲明參數。 文法是 create procedure p([in/out/inout] 參數名 參數類型 ..)
in :給參數傳入值,定義的參數就得到了值
out:模式定義的參數隻能在過程體内部指派,表示該參數可以将某個值傳遞回調用他的過程(在存儲過程内部,該參數初始值為 null,無論調用者是否給存儲過程參數設定值)
inout:調用者還可以通過 inout 參數傳遞值給存儲過程,也可以從存儲過程内部傳值給調用者
如果僅僅想把資料傳給 MySQL 存儲過程,那就使用“in” 類型參數;
如果僅僅從 MySQL 存儲過程傳回值,那就使用“out” 類型參數;
如果需要把資料傳給 MySQL 存儲過程,還要經過一些計算後再傳回給我們,此時,要使用“inout” 類型參數。
- 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
[sql] view plain copy
- CREATE PROCEDURE p2(OUT num INT)
- 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;
- SET @num = 10$$
- CALL p2(@num)$$
- SELECT @num AS num_out$$
- CREATE PROCEDURE p3(INOUT age INT)
- SET age := age + 20;
- set @currage =18$$
- call p3(@currage)$$
- select @currage$$