標籤:mysql 預存程序 procedure
預存程序傳參:預存程序的括弧裡,可以聲明參數。 文法是 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$$
MySQL 預存程序傳參之in, out, inout 參數用法