mysql 存储过程深化篇三、

笑着哭i 提交于 2019-12-02 06:08:53

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;

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!