MySQL存储过程

数据库存储过程
CASE函数使用
CASE
WHEN when_value THEN
statement_list
ELSE
statement_list
END CASE;

CREATE PROCEDURE tt(in a int)
BEGIN
CASE
WHEN a>5 THEN
SELECT a-2;
ELSE
SELECT a+2;
END CASE;
END;

存储过程=函数+事件
存储过程通过begin、end封装
赋值必须用 SET

创建存储过程
CREATE PROCEDURE 存储过程名字(参数列表)
BEGIN
SQL代码内容
END;

CREATE PROCEDURE test(IN a int,in b int) ---- IN输入参数 ---- OUT输出参数
BEGIN
SELECT a+b;
END;

调用存储过程
CALL 存储过程名字(实参列表)
CALL test(2,3);

删除存储
DROP PROCEDUCE存储过程名字;
DROP PROCEDUCE test;

存储过程声明变量格式:
DECLARE+变量名称+变量类型(数据库变量类型)+DEFAULT VALUE;
DECLARE nbc int(11) DEFAULT 11;

控制流程(分支)
IF 条件 THEN
执行语句1
ELSE
执行语句2
END IF;

CREATE PROCEDURE test(IN a int,IN b int)
BEGIN
DECLARE c int(11) DEFAULT 11;
IF a+b+c<11 THEN
SELECT a+b+c;
ELSE
SELECT a+b-c;
END IF;
END

循环操作:
WHILE 条件 DO
执行语句
END WHILE;

DECLARE c int DEFAULT 0;
DECLARE result int DEFAULT 0;

WHILE c<3 DO
set result = result+c;
set c = c+1;
END WHILE;

SELECT result;

函数:
CREATE DEFINER=root@% PROCEDURE p_report_people_clock_order()
BEGIN

END;

事件:
CALL p_report_people_clock_order()

实例:存储过程批量插入
先循环后分支
create procedure zqtest()
begin
declare i int default 1;
while i<80 do
IF i MOD 2=0 THEN
INSERT INTO wzhtest values (i,‘张三’,DATE_FORMAT(NOW(),’%Y-%m-%d’),‘男’);
ELSE
INSERT INTO wzhtest values (i,‘李四’,DATE_FORMAT(NOW(),’%Y-%m-%d’),‘女’);
END IF;
set i=i+1;
end while;
end

call zqtest();
DROP PROCEDURE if EXISTS zqtest;

Ⅱ. repeat···· end repeat:
它在执行操作后检查结果,而while则是执行前进行检查。
CREATE DEFINER=root@localhost PROCEDURE NewProc()
BEGIN
DECLARE a int;
set a=0;
REPEAT
INSERT into test3 VALUES(a);
set a=a+1;
UNTIL a>2 END REPEAT;
END

Ⅲ. loop ·····end loop:
loop循环不需要初始条件,这点和while 循环相似,同时和repeat循环一样不需要结束条件, leave语句的意义是离开循环。

CREATE DEFINER=root@localhost PROCEDURE NewProc()
BEGIN
DECLARE a int;
set a=1;
LOOP_LABLE: LOOP
INSERT into test3 values(a);
set a=a+1;
IF a>=5 THEN
LEAVE LOOP_LABLE;
END IF;
END LOOP;
END

函数创建
CREATE FUNCTION 函数名(参数列表)
RETURNS 返回类型
BEGIN

RETURN 0;

END;

SELECT 函数名( );
创建事件

https://www.cnblogs.com/zoro-zero/p/6511203.html

CREATE EVENT job_p_report_people_pass
ON SCHEDULE EVERY 5 MINUTE
STARTS ‘2020-02-28 17:44:32’
ON COMPLETION NOT PRESERVE ENABLE DO call p_report_people_pass();

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值