1、变量的定义方式
declare orgIds BIGINT 0;或者
declare @orgIds BIGINT 0;
declare:声明变量关键字,
orgIds或者@orgIds:声明变量的名称,带@的是标志变量为局部变量
BIGINT :表示被声明变量的数据类型(在MySQL中,其声明的数据类型子存在八大基础类行,没有数组和list概念,因此在MySQL中没有对象的概念)
注:有MySQL的数据类型我们就可以衍生一个问题,当我通过sql语句查询到一个列表时,我们是无法直接操作结果的每一行的数据,需要借助MySQL里面的游标的概念去处理结果集的每一行数据,游标在Java,其原理类似与迭代器的概念,它会输出一行数据并且将指针指向一行
2、判断的使用
if 条件 than
需要执行的业务操作体
。。。
else
需要执行的业务提
...
end if;
3、循环的使用
这里重要说明 repeat
语法:repeat 开启循环,end repeat 终止循环
repeat
需要执行的业务提代码
。。。
。。。
until state = 1
end repeat;
4、游标
声明方式; declare 游标名称 cursor for 声明的结果集
示例:
declare updateTaskList cursor for SELECT age,name from `table_user` where finished=0;
开启游标:open updateTaskList;
读取游标里面每一行的数据:
fetch updateTaskList into age,name;
关闭游标:close updateTaskList;
完成正存储过程示例:
-- 准备需要统计的数据
DROP PROCEDURE IF EXISTS prepareUpdateData;
CREATE procedure prepareUpdateData()
BEGIN
declare orgIds BIGINT;
declare dimdays INTEGER;
declare state boolean DEFAULT 0;
declare times INT DEFAULT 0;
DECLARE result int;
declare updateTaskList cursor for SELECT org_id,dim_day from `rooster_test_table` where finished=0;
DECLARE CONTINUE HANDLER FOR 1329 SET state = 1;##自定义错误程序
open updateTaskList;
repeat
IF times > 0 THEN
SELECT orgIds,dimdays;
CALL updateMemberDayStatistics(orgIds,dimdays,result);
ELSE
SET times = 1;
END IF;
fetch updateTaskList into orgIds,dimdays;
until state = 1
end repeat;
close updateTaskList;
end;
来源:https://blog.csdn.net/qq_31854907/article/details/102728274