存储过程基础学习

建存储过

CREATE

              [DEFINER = { user | CURRENT_USER }]

PROCEDURE sp_name ([proc_parameter[,…]])

              [characteristic…] routine_body

 

pro_parameter:

              [ IN | OUT | INOUT ] param_name type

 

characteristic:

                   COMMENT ‘string’

                   | LANGUAGE SQL

                   | [NOT] DETERMINISTIC

                   | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }

                   | SQL SECURITY { DEFINER | INVOKE }

 

routine_body:

                   Valid SQL routine statement

 

[begin_label] BEGIN

                   [statement_list]

                   ……

[end_label] END

 

声明语句结束符,可自定义:

DELIMITER $$

DELIMITER //

 

声明存储过程:

CREATE PROCEDURE demo_in_parameter(IN p_in int)

 

存储过程开始和结束符号:

BEGIN…END

 

变量赋值:

SET @p_in=1

 

变量定义:

DECLARE l_in int unsigned default 4000000;

 

创建mysql存储过程,存储函数:

CREATE PROCEDURE存储过程名(参数)

 

存储过程体:

CREATE FUNCTION 存储名称(参数)

===========================================================

-- 设定使用哪个schema

use test;

-- 显示该schema下存在哪些表;

show tables;

 

 

 

 

#将语句的结束符号从分号;临时改为两个$$(可以是自定义)

-- mysql> delimiter $$

-- mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER)

--     -> BEGIN

--     ->   DELETE FROM MATCHES

--     ->    WHERE playerno = p_playerno;

--     -> END $$

-- Query OK, 0 rows affected (0.01 sec)

 

#将语句的结束符号恢复为分号

#中间要有空格

-- mysql> delimiter ;

 

#每个嵌套块及其中的每条语句,必须以分号结束,表示过程体结束的begin-end块(又叫做复合语句compound statement),则不需要分号。

-- DELIMITER //

-- CREATE PROCEDURE PROC()

-- BEGIN

--   BEGIN

--     BEGIN

--       statements;

--     END;

--   END;

-- END;

-- //

 

/*

多行注释

*/

-- 注释符号要与注释内容中间隔一个空格才有效

 

-- 全局变量:@p_in  局部变量:p_in

-- 定义局部变量:declare 局部变量名 类型 default 默认值

 

/*

查询数据库中存在哪些存储过程;

select name from mysql.proc where db='数据库名';

 

查看存储过程的具体内容;

show create procedure '存储过程名';

 

修改存储过程;

alter procedure '存储过程名';

 

删除存储过程;

drop procedure '存储过程名';

*/

 

 

 

CREATE DEFINER=`root`@`localhost` PROCEDURE `proc10`()

begin

                   declare v int;

                   set v=0;

                   LOOP_LABLE:loop

                   if v=3 then

              set v=v+1;

              ITERATE LOOP_LABLE;

              end if;

                   insert into t values(v);

                   set v=v+1;

                   if v>=5 then

                   leave LOOP_LABLE;

                   end if;

                   end loop;

end

 

结果:

0

1

2

4

 

 

 

CREATE DEFINER=`root`@`localhost` PROCEDURE `proc9`()

begin

                   declare v int;

                   set v=0;

                   LOOP_LABLE:loop

                   insert into t values(v);

                   set v=v+1;

                   if v >=3 then

                   leave LOOP_LABLE;

                   end if;

                   end loop;

end

 

CREATE DEFINER=`root`@`localhost` PROCEDURE `proc8`()

begin

                   declare v int;

                   set v=0;

                   repeat

                   insert into t values(v);

                   set v = v+1;

                   until v >= 5

                   end repeat;

end

 

 

CREATE DEFINER=`root`@`localhost` PROCEDURE `proc7`()

begin

                   declare var int;

                   set var = 0;

                   while var < 6 do

                   insert into t values(var);

                   set var = var + 1;

                   end while;

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值