代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
MYSQL
】
MySQL存储过程例子
作者:
Dezai.CN
/ 发布于
2012/8/1
/
1090
MySQL存储过程例子,包含事务,参数,嵌套调用,游标,循环等
<div><span style="font-family: 宋体; font-size: 12px;">---------------------------------- </span> <span style="font-family: 宋体; font-size: 12px;">-- rep_shadow_rs </span> <span style="font-family: 宋体; font-size: 12px;">-- 用来处理信息的增加,更新和删除 </span> <span style="font-family: 宋体; font-size: 12px;">-- 每次只更新上次以来没有做过的数据 </span> <span style="font-family: 宋体; font-size: 12px;">-- 根据不同的标志位 </span> <span style="font-family: 宋体; font-size: 12px;">-- 需要一个输出的参数, </span> <span style="font-family: 宋体; font-size: 12px;">-- 如果返回为0,则调用失败,事务回滚 </span> <span style="font-family: 宋体; font-size: 12px;">-- 如果返回为1,调用成功,事务提交 </span> <span style="font-family: 宋体; font-size: 12px;">-- </span> <span style="font-family: 宋体; font-size: 12px;">-- 测试方法 </span> <span style="font-family: 宋体; font-size: 12px;">-- call pro_rep_shadow_rs(@rtn); </span> <span style="font-family: 宋体; font-size: 12px;">-- select @rtn; </span> <span style="font-family: 宋体; font-size: 12px;">---------------------------------- </span> <span style="font-family: 宋体; font-size: 12px;">create procedure pro_rep_shadow_rs(out rtn int) </span> <span style="font-family: 宋体; font-size: 12px;">begin </span> <span style="font-family: 宋体; font-size: 12px;"> -- 声明变量,所有的声明必须在非声明的语句前面 </span> <span style="font-family: 宋体; font-size: 12px;"> declare iLast_rep_sync_id int default -1; </span> <span style="font-family: 宋体; font-size: 12px;"> declare iMax_rep_sync_id int default -1; </span> <span style="font-family: 宋体; font-size: 12px;"> -- 如果出现异常,或自动处理并rollback,但不再通知调用方了 </span> <span style="font-family: 宋体; font-size: 12px;"> -- 如果希望应用获得异常,需要将下面这一句,以及启动事务和提交事务的语句全部去掉 </span> <span style="font-family: 宋体; font-size: 12px;"> declare exit handler for sqlexception rollback; </span> <span style="font-family: 宋体; font-size: 12px;"> -- 查找上一次的 </span> <span style="font-family: 宋体; font-size: 12px;"> select eid into iLast_rep_sync_id from rep_de_proc_log where tbl='rep_shadow_rs'; </span> <span style="font-family: 宋体; font-size: 12px;"> -- 如果不存在,则增加一行 </span> <span style="font-family: 宋体; font-size: 12px;"> if iLast_rep_sync_id=-1 then </span> <span style="font-family: 宋体; font-size: 12px;"> insert into rep_de_proc_log(rid,eid,tbl) values(0,0,'rep_shadow_rs'); </span> <span style="font-family: 宋体; font-size: 12px;"> set iLast_rep_sync_id = 0; </span> <span style="font-family: 宋体; font-size: 12px;"> end if; </span> <span style="font-family: 宋体; font-size: 12px;"> </span> <span style="font-family: 宋体; font-size: 12px;"> -- 下一个数字 </span> <span style="font-family: 宋体; font-size: 12px;"> set iLast_rep_sync_id=iLast_rep_sync_id+1; </span> <span style="font-family: 宋体; font-size: 12px;"> -- 设置默认的返回值为0:失败 </span> <span style="font-family: 宋体; font-size: 12px;"> set rtn=0; </span> <span style="font-family: 宋体; font-size: 12px;"> </span> <span style="font-family: 宋体; font-size: 12px;"> -- 启动事务 </span> <span style="font-family: 宋体; font-size: 12px;"> start transaction; </span> <span style="font-family: 宋体; font-size: 12px;"> -- 查找最大编号 </span> <span style="font-family: 宋体; font-size: 12px;"> select max(rep_sync_id) into iMax_rep_sync_id from rep_shadow_rs; </span> <span style="font-family: 宋体; font-size: 12px;"> -- 有新数据 </span> <span style="font-family: 宋体; font-size: 12px;"> if iMax_rep_sync_id>=iLast_rep_sync_id then </span> <span style="font-family: 宋体; font-size: 12px;"> -- 调用 </span> <span style="font-family: 宋体; font-size: 12px;"> call pro_rep_shadow_rs_do(iLast_rep_sync_id,iMax_rep_sync_id); </span> <span style="font-family: 宋体; font-size: 12px;"> -- 更新日志 </span> <span style="font-family: 宋体; font-size: 12px;"> update rep_de_proc_log set rid=iLast_rep_sync_id,eid=iMax_rep_sync_id where tbl='rep_shadow_rs'; </span> <span style="font-family: 宋体; font-size: 12px;"> end if; </span> <span style="font-family: 宋体; font-size: 12px;"> </span> <span style="font-family: 宋体; font-size: 12px;"> -- 运行没有异常,提交事务 </span> <span style="font-family: 宋体; font-size: 12px;"> commit; </span> <span style="font-family: 宋体; font-size: 12px;"> -- 设置返回值为1 </span> <span style="font-family: 宋体; font-size: 12px;"> set rtn=1; </span> <span style="font-family: 宋体; font-size: 12px;">end; </span> <span style="font-family: 宋体; font-size: 12px;">| </span> <span style="font-family: 宋体; font-size: 12px;">delimiter ; </span> <span style="font-family: 宋体; font-size: 12px;">drop procedure if exists pro_rep_shadow_rs_do; </span> <span style="font-family: 宋体; font-size: 12px;">delimiter | </span> <span style="font-family: 宋体; font-size: 12px;">--------------------------------- </span> <span style="font-family: 宋体; font-size: 12px;">-- 处理指定编号范围内的数据 </span> <span style="font-family: 宋体; font-size: 12px;">-- 需要输入2个参数 </span> <span style="font-family: 宋体; font-size: 12px;">-- last_rep_sync_id 是编号的最小值 </span> <span style="font-family: 宋体; font-size: 12px;">-- max_rep_sync_id 是编号的最大值 </span> <span style="font-family: 宋体; font-size: 12px;">-- 无返回值 </span> <span style="font-family: 宋体; font-size: 12px;">--------------------------------- </span> <span style="font-family: 宋体; font-size: 12px;">create procedure pro_rep_shadow_rs_do(last_rep_sync_id int, max_rep_sync_id int) </span> <span style="font-family: 宋体; font-size: 12px;">begin </span> <span style="font-family: 宋体; font-size: 12px;"> declare iRep_operationtype varchar(1); </span> <span style="font-family: 宋体; font-size: 12px;"> declare iRep_status varchar(1); </span> <span style="font-family: 宋体; font-size: 12px;"> declare iRep_Sync_id int; </span> <span style="font-family: 宋体; font-size: 12px;"> declare iId int; </span> <span style="font-family: 宋体; font-size: 12px;"> -- 这个用于处理游标到达最后一行的情况 </span> <span style="font-family: 宋体; font-size: 12px;"> declare stop int default 0; </span> <span style="font-family: 宋体; font-size: 12px;"> -- 声明游标 </span> <span style="font-family: 宋体; font-size: 12px;"> declare cur cursor for select id,Rep_operationtype,iRep_status,rep_sync_id from rep_shadow_rs where rep_sync_id between last_rep_sync_id and max_rep_sync_id; </span> <span style="font-family: 宋体; font-size: 12px;"> -- 声明游标的异常处理,设置一个终止标记 </span> <span style="font-family: 宋体; font-size: 12px;"> declare CONTINUE HANDLER FOR SQLSTATE '02000' SET stop=1; </span> <span style="font-family: 宋体; font-size: 12px;"> </span> <span style="font-family: 宋体; font-size: 12px;"> -- 打开游标 </span> <span style="font-family: 宋体; font-size: 12px;"> open cur; </span> <span style="font-family: 宋体; font-size: 12px;"> </span> <span style="font-family: 宋体; font-size: 12px;"> -- 读取一行数据到变量 </span> <span style="font-family: 宋体; font-size: 12px;"> fetch cur into iId,iRep_operationtype,iRep_status,iRep_Sync_id; </span> <span style="font-family: 宋体; font-size: 12px;"> -- 这个就是判断是否游标已经到达了最后 </span> <span style="font-family: 宋体; font-size: 12px;"> while stop <> 1 do </span> <span style="font-family: 宋体; font-size: 12px;"> -- 各种判断 </span> <span style="font-family: 宋体; font-size: 12px;"> if iRep_operationtype='I' then </span> <span style="font-family: 宋体; font-size: 12px;"> insert into rs0811 (id,fnbm) select id,fnbm from rep_shadow_rs where rep_sync_id=iRep_sync_id; </span> <span style="font-family: 宋体; font-size: 12px;"> elseif iRep_operationtype='U' then </span> <span style="font-family: 宋体; font-size: 12px;"> begin </span> <span style="font-family: 宋体; font-size: 12px;"> if iRep_status='A' then </span> <span style="font-family: 宋体; font-size: 12px;"> insert into rs0811 (id,fnbm) select id,fnbm from rep_shadow_rs where rep_sync_id=iRep_sync_id; </span> <span style="font-family: 宋体; font-size: 12px;"> elseif iRep_status='B' then </span> <span style="font-family: 宋体; font-size: 12px;"> delete from rs0811 where id=iId; </span> <span style="font-family: 宋体; font-size: 12px;"> end if; </span> <span style="font-family: 宋体; font-size: 12px;"> end; </span> <span style="font-family: 宋体; font-size: 12px;"> elseif iRep_operationtype='D' then </span> <span style="font-family: 宋体; font-size: 12px;"> delete from rs0811 where id=iId; </span> <span style="font-family: 宋体; font-size: 12px;"> end if; </span> <span style="font-family: 宋体; font-size: 12px;"> </span> <span style="font-family: 宋体; font-size: 12px;"> -- 读取下一行的数据 </span> <span style="font-family: 宋体; font-size: 12px;"> fetch cur into iId,iRep_operationtype,iRep_status,iRep_Sync_id; </span> <span style="font-family: 宋体; font-size: 12px;"> end while; -- 循环结束 </span> <span style="font-family: 宋体; font-size: 12px;"> close cur; -- 关闭游标 </span> <span style="font-family: 宋体; font-size: 12px;"> end; </span> </div>
试试其它关键字
同语言下
.
MySQL按日期分组统计(按天统计,按月统计)
.
mysql 获取某个库下面所有表的所有数据(
.
查看表当前自增值
.
查看碎片较多的表
.
查看数据表较大的表
.
查看非InnoDB引擎表
.
根据某一字段值按照某一特定符转化为列数据
.
按时间段分组查询当天小时内数据
.
mysql json 使用 类型 查询 函数
.
按天数据统计
可能有用的
.
MySQL按日期分组统计(按天统计,按月统计)
.
mysql 获取某个库下面所有表的所有数据(
.
查看表当前自增值
.
查看碎片较多的表
.
查看数据表较大的表
.
查看非InnoDB引擎表
.
根据某一字段值按照某一特定符转化为列数据
.
按时间段分组查询当天小时内数据
.
mysql json 使用 类型 查询 函数
.
按天数据统计
Dezai.CN
贡献的其它代码
(
4037
)
.
多线程Socket服务器模块
.
生成随机密码
.
清除浮动样式
.
弹出窗口居中
.
抓取url的函数
.
使用base HTTP验证
.
div模拟iframe嵌入效果
.
通过header转向的方法
.
Session操作类
.
执行sqlite输入插入操作后获得自动编号的ID
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3