BEGIN
#Routine body goes here...
DECLARE nidCode varchar(50);
DECLARE m smallint(2);
DECLARE e smallint(2);
DECLARE p smallint(2);
DECLARE j smallint(6);
DECLARE x smallint(6);
DECLARE jpushpage varchar(32);
#渠道
DECLARE channels VARCHAR(20) default '';
DECLARE smsC VARCHAR(20) default 'sms';
DECLARE smsCD VARCHAR(20) default ',sms';
DECLARE emailC VARCHAR(20) default 'email';
DECLARE emailCD VARCHAR(20) default ',email';
DECLARE sysC VARCHAR(20) default 'sys';
DECLARE sysD VARCHAR(20) default ',sys';
DECLARE jpushC VARCHAR(20) default 'jpush';
DECLARE jpushCD VARCHAR(20) default ',jpush';
DECLARE xgC VARCHAR(20) default 'xg';
DECLARE xgCD VARCHAR(20) default ',xg';
#t_message_template中是否存在nid的记录
DECLARE cnt int default 0;
#总共修改了message.t_message_template几条记录
DECLARE modifyCount int default 0;
#这个用于处理游标到达最后一行的情况
DECLARE s int default 0;
#声明游标cursor_name(cursor_name是个多行结果集)
DECLARE cursor_name CURSOR FOR select nid,message,email,phone,jpush,xg,jpush_page from ucdai.yyd_remind;
#设置一个终止标记
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s=1;
#打开游标
OPEN cursor_name;
#获取游标当前指针的记录,读取一行数据并传给变量a,b
fetch cursor_name into nidCode,m,e,p,j,x,jpushpage ;
set modifyCount = 0;
#开始循环,判断是否游标已经到达了最后作为循环条件
while s <> 1 do
set channels = '';
#系统消息
if m =1 || m=3 THEN
if channels = '' THEN
set channels = concat(channels,sysC);
else
set channels = concat(channels,sysCD);
end if;
end if;
if e=1 || e=3 THEN
if channels = '' THEN
set channels = concat(channels,emailC);
else
set channels = concat(channels,emailCD);
end if;
end if;
#sms
if p=1 || p=3 THEN
if channels = '' THEN
set channels = concat(channels,smsC);
else
set channels = concat(channels,smsCD);
end if;
end if;
#jpush
if j=1 || j=3 THEN
if channels = '' THEN
set channels = concat(channels,jpushC);
else
set channels = concat(channels,jpushCD);
end if;
end if;
#xg
if x=1 || x=3 THEN
if channels = '' THEN
set channels = concat(channels,xgC);
else
set channels = concat(channels,xgCD);
end if;
end if;
#set nidCode = '41';
select count(*) into cnt from t_message_template where nid = nidCode;
#SELECT cnt;
if cnt > 0 THEN
update t_message_template set channel = channels,jpush_page= jpushpage,UPDATE_TIME =SYSDATE() where nid= nidCode;
set modifyCount = modifyCount + cnt;
end if;
#读取下一行的数据
fetch cursor_name into nidCode,m,e,p,j,x,jpushpage;
end while;
#关闭游标
CLOSE cursor_name ;
select modifyCount;
END
相关推荐
在MySQL中,游标通常与存储过程配合使用,使我们能够根据需要在结果集中向前或向后移动,实现逐行处理数据,这在动态或条件性的数据处理中尤为关键。 在“mysql存储过程_游标_项目练习”中,我们可能需要完成以下...
Mysql存储过程游标触发器
在SQL Server中,遍历表中的记录是数据库操作中常见的一种任务,特别是在处理逐行处理数据或执行复杂逻辑时。本文将深入探讨两种方法:使用表变量和使用游标。 首先,我们来看如何通过表变量来遍历记录。表变量在...
MySQL 存储过程与游标的混合使用,也没啥重要的,就是和其他数据库有一些不同而已,作为总结,以后复习
SQL存储过程和游标是SQL语言中两个非常重要的概念,它们可以帮助开发者更好地管理和处理数据。在本节中,我们将详细介绍存储过程和游标的基本概念和应用。 什么是存储过程 存储过程是一个预编译的SQL语句集合,它...
Mysql存储过程、游标、函数调用、事务处理、触发器代码示例,可用作学习参考。
通过以上对Oracle存储过程、游标和函数的详细介绍,我们可以看到这些特性为Oracle数据库提供了一种强大而灵活的方式来处理数据。掌握这些技术对于开发高效的应用程序至关重要。在未来的学习和实践中,我们应该不断...
以上示例展示了如何使用SQL语言中的存储过程和游标功能来实现特定的数据处理任务。通过这两个示例,我们可以看到存储过程的灵活性以及游标处理多行数据的强大能力。这些技术在实际开发中非常有用,能够帮助开发者更...
在MySQL中,游标是一种数据库对象,主要用于处理存储过程中的结果集。游标允许我们逐行地读取查询结果,这对于需要对每一行数据执行特定操作的情况非常有用。通过使用游标,我们可以实现更加灵活的数据处理逻辑。 #...
下面是一个简单的游标示例,用于遍历表中的每一行并打印数据: ```sql DECLARE @id INT, @name VARCHAR(50); DECLARE myCursor CURSOR FOR SELECT ID, Name FROM Employees; OPEN myCursor; FETCH NEXT FROM ...
本文将深入探讨存储过程、触发器和游标,以及它们在实际应用中的综合使用。 首先,让我们来理解存储过程。存储过程是预编译的SQL语句集合,它封装了一系列数据库操作并在需要时执行。这种高级的SQL构造可以提高性能...
### 存储过程与游标的综合应用:批量插入数据 #### 一、存储过程简介 在数据库管理系统(DBMS)中,存储过程是一种预编译的SQL代码块,它可以接受输入参数并返回输出值,类似于编程语言中的函数或过程。通过创建...
总结来说,这个示例展示了如何在MySQL存储过程中使用游标进行循环处理,并在循环内部再次嵌套游标以实现更精细的数据操作。这种技术在处理大量数据或执行复杂逻辑时非常有用,尤其是在需要逐行检查和处理数据的情况...
最近遇到这样的问题,在MySQL的存储过程中,游标操作时,需要执行一个conitnue的操作.众所周知,MySQL中的游标循环操作常用的有三种,LOOP,REPEAT,WHILE.三种循环,方式大同小异.以前从没用过,所以记下来,方便以后查阅. 1....
存储过程中通过返回数据集,通过游标方式实现,以及在java中如何接收的整个过程
标题:“oracle存储过程使用游标对多表操作例子”直接指出了文章的主题是关于在Oracle环境下,如何利用存储过程和游标实现跨多个表的数据处理。描述部分重复了标题内容,强调了示例性质,表明文章将通过具体实例来...
在这个场景中,我们有三个文件:TESTPACKAGE.txt,CURSOR_TEST2.txt和OracleProcedure.java,分别涉及Oracle存储过程的创建、游标的使用以及Java代码如何与Oracle存储过程交互。 首先,`TESTPACKAGE.txt`很可能包含...