数据库存储过程
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();