基本結構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 ;