mysql 存储过程深化篇三、

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;

示例二、

-- 更新员工每天统计
DROP PROCEDURE IF EXISTS updateMemberDayStatistics;
CREATE PROCEDURE updateMemberDayStatistics(IN orgId VARCHAR(50),IN dimDay INTEGER,OUT result INT)
BEGIN
	SET @sql = CONCAT('update rooster_test_table set finished = 1 where org_id = ', orgId," AND dim_day = ",dimDay);
	PREPARE stmt FROM @sql;
	EXECUTE stmt;
	DEALLOCATE PREPARE stmt;
	SET result =@count;

END;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值