MySql存储过程

基本结构

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

 

参数类型

  

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

    存储过程参数在过程名的括号里声明

    参数类型包括 只读(in),只写(out),可读写(inout)

       in 给存储过程传入参数值

      out  向调用存储过程的调用者返回数据

      inout 可以对传入参数进行修改后再返回给存储过程(比如分页存储过程中当前页的参数应当设置为i                        inout类型)

变量类型

    mysql存储过程中有两种变量类型

     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 ;

 

转载于:https://my.oschina.net/u/1377006/blog/783444

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值