mysql存储过程游标的运用,适合对游标刚学习者。
来源:互联网 发布:aix 修改ssh端口 编辑:程序博客网 时间:2024/06/05 11:32
近来,因业务的需要写了一个存储,放上面晒晒。适合对游标刚学习者,大致业务是实现对多张表审核操作需要插入审核消息记录
--创建带有三个输入参数,一个输出参数的存储
create procedure prop_dealMessage (in ids integer ,in status1 integer ,in op integer , out ids1 varchar(20))
begin
--声明业务变量
declare v_sql varchar(100);
declare var1 varchar(20);
declare message text;
declare var2 varchar(20);
declare var3 integer;
--声明游标并标记游标是否可读;no_more_departments = 0 可读;no_more_departments = 1 不可读;这里大量声明了多个游标其实不可取,但用动态sql也不好处理,为了--完成任务暂时就这么写上去了。
declare no_more_departments integer default 0;
declare c_result cursor for select title,createuser from project_info where id = ids;
declare c_result1 cursor for select p.title,pd.userId from project_detail pd left join project_info p on p.id = pd.projectinfoId where pd.id = ids;
declare CONTINUE HANDLER FOR NOT FOUND
SET no_more_departments =1;
set ids1 = ",";
--处理我的业务逻辑,读者不用关心细节
if (op = 1 || op =7) then
if status1 = 22 then set message = ( select concat("恭喜!你的项目已通过审核成功发布!-"));
elseif status1 = 23 then set message = "伤心!你的项目未通过审核,下次努力!-" ;
elseif status1 = 21 then set message = "耐心! 后台正在复审!-" ;
end if;
open c_result; --打开游标
dept_loop:REPEAT
FETCH C_RESULT INTO var1 ,var3; --将游标每次迭代的数据赋值给变量var1,var3
IF no_more_departments= 0 THEN
insert into user_message(receiveid,sendid,content,type,enabled,isDeleted,Createdate) values( var3,-1, concat(message,"\"",var1,"\""),11,1,0,now());--满足条件执行插入数据
select last_insert_id() into var2;
set ids1 = concat(ids1 ,var2 ,",");
END IF;
UNTIL no_more_departments END REPEAT dept_loop;
close c_result; --关闭游标
elseif op =2 then
if status1 = 22 then set message = ( select concat("恭喜!你通过审核成功加入-"));
elseif status1 = 23 then set message = "伤心!你未通过审核失败加入!-" ;
elseif status1 = 21 then set message = "耐心! 后台正在复审!-" ;
end if;
open c_result1;
dept_loop:REPEAT
FETCH C_RESULT1 INTO var1 ,var3;
IF no_more_departments= 0 THEN
insert into user_message(receiveid,sendid,content,type,enabled,isDeleted,Createdate) values( var3,-1, concat(message,"\"",var1,"\""),11,1,0,now());
select last_insert_id() into var2;
set ids1 = concat(ids1 ,var2 ,",");
END IF;
UNTIL no_more_departments END REPEAT dept_loop;
close c_result1;
end if;
end
--调用带差存储
call prop_dealMessage(4, 22,8,@x);
select @x;
--总结:读者只要将游标的适用当做循环的适用方法,就很好学习游标的运用了。
- mysql存储过程游标的运用,适合对游标刚学习者。
- mysql存储过程,对游标的操作
- mysql存储过程+游标
- mysql 游标+存储过程
- mysql 存储过程 游标
- mysql 存储过程游标
- MySQL 存储过程 游标
- mysql-游标及存储过程游标的使用--源自技术
- mysql 存储过程(临时表、循环、游标综合运用)
- mysql 存储过程 游标的例子
- mysql存储过程游标的嵌套
- MYSQL的存储过程入门游标
- MySQL存储过程 游标循环的使用
- Mysql存储过程关于游标的解决方案
- mysql存储过程以及游标的使用
- MySQL 存储过程游标的简单用法
- Mysql 存储过程游标的使用
- mysql 存储过程 -- 游标的使用
- Android broadcastReciever相关
- Eclipse使用ButterKnife前,需要的配置步骤
- linux 之 echo命令用法
- linux下安装svn以及实现同步web服务器~~
- PHP学习笔记
- mysql存储过程游标的运用,适合对游标刚学习者。
- Linux 性能监测
- 开通博客的第一天
- Http协议
- Ipc方式的优缺点和适用场景
- OC语言 内存管理
- 在cmd等终端运行python代码,文件
- Content Provider
- python的cls,self,classmethod,staticmethod