MySQL的存储过程、游标和事务实例

MySQL的存储过程、游标和事务实例
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存储过程、游标和事务的解释。如果有任何疑问,请留言或与当地社区交换意见。谢谢你的阅读。我们希望能帮助你。感谢您对本站的支持。

tag:存储过程游标实例事务电脑软件

相关内容