MySQL的存储过程、游标和事务实例
以下是mysql数据库存储程序,已经自己编写,留作存档,使用时参考使用。
其中包括存储过程、游标(双循环)和事务。
{ }:代码中的注释只在当时的业务中被忽略。
代码如下:
$分隔符
下降过程是否存在` transferemailtempdata `美元
创建程序(在transferemailtempdata jobid varchar(24))
开始
声明idval varchar(24)违约;
声明taskidval varchar(24)违约;
声明groupidval varchar(24)违约;
声明emailval varchar(50)违约;
如果存在一个正式的表格识别相同的数据,即:GroupID,电子邮件一样。
varchar(24)申报一违约;
标识事务错误
默认值为0;
达到一定数量的提交的计数器
将计数声明为默认值0;
徽标太大了。
声明isrollback int默认0;
*游标遍历,遍历所有记录以确定标记是否
宣告完成整型默认值0;
该任务将获得一个临时表
声明游标CUR选择ID taskId GroupID,电子邮件,` t_email_data_temp `哪里;
根据组ID,电子邮件 * /查询是否有相同的记录
声明游标进行选择ID从` t_email_info ` E,E ` group_id ` = groupidval;
如果出现异常回滚,则将错误设置为1。
声明继续处理SQLException设置错误=1;
语句当游标遍历完成时,所有记录将标记变量设置为某个值。
声明未找到的继续处理程序
设置完成= 1;
打开事务
开始交易;
打开游标
开放课程;
使用循环循环遍历
out_loop:环
每个字段赋值给变量的对应值。
接电流为idval,taskidval,groupidval,emailval;
如果做= 1然后
离开out_loop;
如果结束;
打开第二个游标
开放的研究;
设置完成= 0;
取研究进一;
*如果一个正式的表不在同一个GroupID和电子邮件记录存在,正式加入到表。
如果做= 1然后
一个正式的表插入
插入` t_email_info `值(idval,emailval,groupidval,0,,现在(),'admin ',现在(),'admin);
删除临时数据
删除从` t_email_data_temp ` id是idval;
计数器,每1000个提交*
设置计数=计数+ 1;
回滚异常。
如果错误=1,那么
集isrollback = 1;
回降;
其他的
如果计数= 1000然后
承诺;
提交后应达到1000,重新设置计数器。
设置计数= 0;
如果结束;
最后如果;
其他的
有相同的记录,删除记录。
如果做= 0然后
删除从` t_email_data_temp ` id是idval;
如果结束;
最后如果;
取研究进一;
密切的研究;
应控制外部流通,这一步不能错过,否则只有一个周期结束。
设置完成= 0;
循环结束out_loop;
关闭当前;
*如果没有回滚事件,则更新任务状态。
如果一个任务回滚,状态更新,下一次执行任务时,将剩余的未提交的数据添加到正式列表中。
如果isrollback = 0
更新` t_email_task ` T没有` if_finish `,T. ` ID ` = jobid = 1;
如果结束;
结束美元
分隔符;
以上是mysql存储过程、游标和事务的解释。如果有任何疑问,请留言或与当地社区交换意见。谢谢你的阅读。我们希望能帮助你。感谢您对本站的支持。