天天看點

【基礎】存儲過程IN、OUT、INOUT參數模式前言概述一 執行個體準備條件二 IN 模式 : 參數輸入模式三 OUT 模式 : 參數輸出模式四 INOUT 模式 : 作為輸入和輸出模式

前言

Github:https://github.com/yihonglei/road-of-arch/tree/master/thinking-in-mysql

概述

MySql 存儲過程參數有 IN、OUT、INOUT 三種模式。

一 執行個體準備條件

建立表:

CREATE TABLE `t_user_main` (
  `f_userId` int(10) NOT NULL AUTO_INCREMENT COMMENT '使用者id,作為主鍵',
  `f_userName` varchar(5) DEFAULT NULL COMMENT '使用者名',
  `f_age` int(3) DEFAULT NULL COMMENT '年齡',
  PRIMARY KEY (`f_userId`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
           

插入資料:

INSERT INTO t_user_main (f_userName, f_age) 
VALUES('one',24),('two',25),('three',26),('four',27),('five',28),('six',29);
           

二 IN 模式 : 參數輸入模式

DELIMITER $$ # 定界符
CREATE PROCEDURE user_main_pro1(IN v_id INT)
BEGIN
  #定義變量
  DECLARE v_userName VARCHAR(50);
  #通過select...into...給變量指派
  SELECT f_userName INTO v_userName FROM t_user_main WHERE f_userId = v_id;
  #執行DDL語句
  INSERT INTO t_user_main (f_userName) VALUES (v_userName);
END $$ #存儲過程建立結束
DELIMITER; #恢複mysql分号定界符
           

調用:

【基礎】存儲過程IN、OUT、INOUT參數模式前言概述一 執行個體準備條件二 IN 模式 : 參數輸入模式三 OUT 模式 : 參數輸出模式四 INOUT 模式 : 作為輸入和輸出模式

三 OUT 模式 : 參數輸出模式

DELIMITER $$
CREATE PROCEDURE user_main_pro2(OUT v_count INT)
BEGIN
  SELECT COUNT(*) INTO v_count FROM t_user_main;
END $$
DELIMITER
           

調用:

【基礎】存儲過程IN、OUT、INOUT參數模式前言概述一 執行個體準備條件二 IN 模式 : 參數輸入模式三 OUT 模式 : 參數輸出模式四 INOUT 模式 : 作為輸入和輸出模式

定義存儲過程 user_main_pro2 用于計算 t_user_main 表的使用者總數,處理完後通過參數 out 模式傳回處理結果,

指令視窗通過 set @v_count = 1; 定義變量并初始化,通過定義的變量去接受存儲過程處理完成 out 輸出的結果,

最後通過 select @v_count 檢視接受後的變量值,也即是存儲過程處理完成的結果。

四 INOUT 模式 : 作為輸入和輸出模式

DELIMITER $$
CREATE PROCEDURE user_main_pro3(INOUT v_id INT)
BEGIN
  # 定義變量
  DECLARE v_count INT(11);
  # 判斷
  IF v_id > 3 THEN
     SET v_count = 100;
  ELSE 
     SET v_count = 500;
  END IF;
  # 傳回指派
  SET v_id = v_count;
END $$
DELIMITER;
           

調用:

【基礎】存儲過程IN、OUT、INOUT參數模式前言概述一 執行個體準備條件二 IN 模式 : 參數輸入模式三 OUT 模式 : 參數輸出模式四 INOUT 模式 : 作為輸入和輸出模式

建立存儲過程 user_main_pro3,參數模式為 INOUT 模式,該模式參數既作為輸入,也可作為輸出。

定義一個變量 set @v_id=1,通過call user_main_pro3(@v_id)調用存儲過程,

将參數 @v_id 輸入後滿足判斷的 else,存儲過程處理結果為 500,同時也通過

變量 @v_id 接受存儲過程處理的結果。

是以,INOUT 模式參數 v_id 既可以作為輸入,也可以作為輸出。

繼續閱讀