天天看點

MySQL 存儲過程傳參之in, out, inout 參數用法

存儲過程傳參:存儲過程的括号裡,可以聲明參數。 文法是 create procedure p([in/out/inout] 參數名  參數類型 ..)

in :給參數傳入值,定義的參數就得到了值

out:模式定義的參數隻能在過程體内部指派,表示該參數可以将某個值傳遞回調用他的過程(在存儲過程内部,該參數初始值為 null,無論調用者是否給存儲過程參數設定值)

inout:調用者還可以通過 inout 參數傳遞值給存儲過程,也可以從存儲過程内部傳值給調用者

如果僅僅想把資料傳給 MySQL 存儲過程,那就使用“in” 類型參數;

如果僅僅從 MySQL 存儲過程傳回值,那就使用“out” 類型參數;

如果需要把資料傳給 MySQL 存儲過程,還要經過一些計算後再傳回給我們,此時,要使用“inout” 類型參數。 

  1. DELIMITER $$  
  2. CREATE PROCEDURE p1(IN num INT)  
  3. BEGIN  
  4.   DECLARE i INT DEFAULT 0;  
  5.   DECLARE total INT DEFAULT 0;  
  6.   WHILE i<=num DO  
  7.     SET total := i + total;  
  8.     SET i := i+1;  
  9.   END WHILE;  
  10.   SELECT total;  
  11. END$$  
MySQL 存儲過程傳參之in, out, inout 參數用法

存儲過程傳參 out

[sql] view plain copy   

  1. CREATE PROCEDURE p2(OUT num INT)  
  2.  SELECT num AS num_1;  
  3.  IF (num IS NOT NULL) THEN  
  4.  SET num = num + 1;  
  5.  SELECT num AS num_2;  
  6.  ELSE  
  7.  SELECT 1 INTO num;  
  8.  END IF;  
  9.  SELECT num AS num_3;  
  10. SET @num = 10$$  
  11. CALL p2(@num)$$  
  12. SELECT @num AS num_out$$  
MySQL 存儲過程傳參之in, out, inout 參數用法
  1. CREATE PROCEDURE p3(INOUT age INT)  
  2.   SET age := age + 20;  
  3. set @currage =18$$  
  4. call p3(@currage)$$  
  5. select @currage$$  
MySQL 存儲過程傳參之in, out, inout 參數用法