MySql存儲過程

基本結構mysql

DELIMITER $$
DROP PROCEDURE IF EXISTS `test`$$
CREATE PROCEDURE `test`()
BEGIN 
END$$
DELIMITER ;

 

參數類型sql

  

DELIMITER $$
DROP PROCEDURE IF EXISTS `test`$$
CREATE PROCEDURE `test`(
IN inparam INT,
OUT outparam INT,
INOUT inoutparam INT
)
BEGIN 
END$$
DELIMITER ;

    存儲過程參數在過程名的括號裏聲明express

    參數類型包括 只讀(in),只寫(out),可讀寫(inout)oop

       in 給存儲過程傳入參數值調試

      out  向調用存儲過程的調用者返回數據code

      inout 能夠對傳入參數進行修改後再返回給存儲過程(好比分頁存儲過程當中當前頁的參數應當設置爲i                        inout類型)開發

變量類型io

    mysql存儲過程當中有兩種變量類型test

     1 declare 聲明的局部變量(咱們這樣命名的,這種變量只在過程體begin,end之間纔有效)變量

           DECLARE param1 INT DEFAULT 1;

     2 帶@的全局變量(在整個會話過程當中都有效)

DELIMITER $$
DROP PROCEDURE IF EXISTS `testparam`$$
CREATE PROCEDURE `testparam`()
BEGIN
  DECLARE param1 INT DEFAULT 1;
  SET param1 = param1 +1;
  SET @param2 =  @param2+1;
  SELECT param1,@param2; 
END$$
DELIMITER ;

SET @param2 =3;
CALL testparam();

給param2設置一個初始值而後調用存儲過程,發現每次param1都是2,param2逐次加1.

 上面列子中的set語句是給變量複製,select語句是查詢語句,將結果顯示在窗口,這點可用在代碼調試上,固然實際開發中主要仍是使用斷點。

條件判斷(if,case..when語句)

    這是if語句的基本結構

IF expression THEN commands  
   [ELSEIF expression THEN commands]  
   [ELSE commands]  
   END IF;

  這是 case when語句的基本結構

CASE  case_expression  
   WHEN when_expression THEN commands  
   WHEN when_expression THEN commands  
   ...  
   ELSE commands  
END CASE;

注意下最後面有一個匹配的end(Java裏面好像沒有) 

循環語句

  有三種 循環語句

WHILE……DO……END WHILE
REPEAT……UNTIL END REPEAT
LOOP……END LOOP

咱們來寫一個從1加到50的例子

WHILE……DO……END WHILE 語句,

while語句執行前檢查

當i<50時中止循環(while 與 end while 之間的代碼塊是循環體 也就是退出條件不知足時一直執行 循環體之間的代碼塊)

DELIMITER $$
DROP PROCEDURE IF EXISTS `testwhile`$$
CREATE PROCEDURE `testwhile`()
BEGIN
  DECLARE i INT ;
  DECLARE result INT DEFAULT 0;
  SET i =1;
  WHILE i<50 DO 
   SET result = result +i;
   SET i= i+1;
  END WHILE;
  SELECT result;   
END$$
DELIMITER ;

 

 REPEAT……UNTIL END REPEAT語句

 repeat語句先執行完repeate 包含的代碼塊在判斷until後面的語句

直到until後面條件語句成立時退出循環,這種語句至少執行一次repeat代碼塊裏面的語句。

REPEAT
   UNTIL repeat_expression
END REPEAT;

上面的從1加到50的例子用 REPEAT……UNTIL END REPEAT語句就是這樣的了(repeat 與 end repeat 之間的代碼塊是循環體 也就是退出條件不知足時一直執行 循環體之間的代碼塊)

DELIMITER $$
DROP PROCEDURE IF EXISTS `testwhile`$$
CREATE PROCEDURE `testwhile`()
BEGIN
  DECLARE i INT ;
  DECLARE result INT DEFAULT 0;
  SET i =1;
  REPEAT
      SET result = result +i;
      SET i=i+1;
      UNTIL i>=50
   END REPEAT;
  SELECT result;  
END$$

 

        LOOP……END LOOP 語句(loop 與 end loop 之間的代碼塊是循環體 也就是退出條件不知足時一直執行 循環體之間的代碼塊)

DELIMITER $$
DROP PROCEDURE IF EXISTS `testwhile`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `testwhile`()
BEGIN
  DECLARE i INT ;
  DECLARE result INT DEFAULT 0;
  SET i =1;
  loop_while:LOOP
  SET result = result + i;
  SET i= i+1;
  IF i>=50 THEN 
  LEAVE loop_while;
  END IF;
  END LOOP;
  SELECT result;   
END$$
DELIMITER ;
相關文章
相關標籤/搜索