仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 831|回复: 7
打印 上一主题 下一主题

[学习教程] 发布MySQL存储历程例子,包括事件,参数,嵌套挪用,游标,轮回等 ...

[复制链接]
山那边是海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 20:12:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
RDBMS并非没有局限性。它们难以扩展,需要大量的资源来配置和维护,比如时间、硬件和人力。同样,它们往往遵循峰值性能模型,这就要求系统按照峰值容量来配置可用性,而不考虑典型的数据使用情况。viewplaincopytoclipboardPRint?
dropprocedureifexistspro_rep_shadow_rs;
delimiter|
----------------------------------
--rep_shadow_rs
--用来处置信息的增添,更新和删除
--每次只更新前次以来没有做过的数据
--依据分歧的标记位
--必要一个输入的参数,
--假如前往为0,则挪用失利,事件回滚
--假如前往为1,挪用乐成,事件提交
--
--测试办法
--callpro_rep_shadow_rs(@rtn);
--select@rtn;
----------------------------------
createprocedurepro_rep_shadow_rs(outrtnint)
begin
--声明变量,一切的声明必需在非声明的语句后面
declareiLast_rep_sync_idintdefault-1;
declareiMax_rep_sync_idintdefault-1;
--假如呈现非常,或主动处置并rollback,但不再关照挪用方了
--假如但愿使用取得非常,必要将上面这一句,和启动事件和提交事件的语句全体往失落
declareexithandlerforsqlexceptionrollback;
--查找上一次的
selecteidintoiLast_rep_sync_idfromrep_de_proc_logwheretbl=rep_shadow_rs;
--假如不存在,则增添一行
ifiLast_rep_sync_id=-1then
insertintorep_de_proc_log(rid,eid,tbl)values(0,0,rep_shadow_rs);
setiLast_rep_sync_id=0;
endif;

--下一个数字
setiLast_rep_sync_id=iLast_rep_sync_id+1;
--设置默许的前往值为0:失利
setrtn=0;

--启动事件
starttransaction;
--查找最年夜编号
selectmax(rep_sync_id)intoiMax_rep_sync_idfromrep_shadow_rs;
--有新数据
ifiMax_rep_sync_id>=iLast_rep_sync_idthen
--挪用
callpro_rep_shadow_rs_do(iLast_rep_sync_id,iMax_rep_sync_id);
--更新日记
updaterep_de_proc_logsetrid=iLast_rep_sync_id,eid=iMax_rep_sync_idwheretbl=rep_shadow_rs;
endif;

--运转没有非常,提交事件
commit;
--设置前往值为1
setrtn=1;
end;
|
delimiter;
dropprocedureifexistspro_rep_shadow_rs_do;
delimiter|
---------------------------------
--处置指定编号局限内的数据
--必要输出2个参数
--last_rep_sync_id是编号的最小值
--max_rep_sync_id是编号的最年夜值
--无前往值
---------------------------------
createprocedurepro_rep_shadow_rs_do(last_rep_sync_idint,max_rep_sync_idint)
begin
declareiRep_Operationtypevarchar(1);
declareiRep_statusvarchar(1);
declareiRep_Sync_idint;
declareiIdint;
--这个用于处置游标抵达最初一行的情形
declarestopintdefault0;
--声明游标
declarecurcursorforselectid,Rep_operationtype,iRep_status,rep_sync_idfromrep_shadow_rswhererep_sync_idbetweenlast_rep_sync_idandmax_rep_sync_id;
--声明游标的非常处置,设置一个停止标志
declareCONTINUEHANDLERFORSQLSTATE02000SETstop=1;

--翻开游标
opencur;

--读取一行数据到变量
fetchcurintoiId,iRep_operationtype,iRep_status,iRep_Sync_id;
--这个就是判别是不是游标已抵达了最初
whilestop1do
--各类判别
ifiRep_operationtype=Ithen
insertintors0811(id,fnbm)selectid,fnbmfromrep_shadow_rswhererep_sync_id=iRep_sync_id;
elseifiRep_operationtype=Uthen
begin
ifiRep_status=Athen
insertintors0811(id,fnbm)selectid,fnbmfromrep_shadow_rswhererep_sync_id=iRep_sync_id;
elseifiRep_status=Bthen
deletefromrs0811whereid=iId;
endif;
end;
elseifiRep_operationtype=Dthen
deletefromrs0811whereid=iId;
endif;

--读取下一行的数据
fetchcurintoiId,iRep_operationtype,iRep_status,iRep_Sync_id;
endwhile;--轮回停止
closecur;--封闭游标
end;
|
在我们工作的过程中,经常能听到很多不使用MySQL的理由,虽然其中有一些是对MySQL的误解,不过同样也有一些是合情合理的。
灵魂腐蚀 该用户已被删除
沙发
发表于 2015-1-18 17:08:39 来自手机 | 只看该作者
如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。
爱飞 该用户已被删除
板凳
发表于 2015-1-22 17:36:43 | 只看该作者
很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。
活着的死人 该用户已被删除
地板
发表于 2015-1-31 09:09:19 | 只看该作者
外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。
分手快乐 该用户已被删除
5#
发表于 2015-2-6 19:00:06 | 只看该作者
所以你总能得到相应的升级版本,来满足你的需求。
admin 该用户已被删除
6#
发表于 2015-2-18 08:42:32 | 只看该作者
sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西
第二个灵魂 该用户已被删除
7#
发表于 2015-3-6 02:58:56 | 只看该作者
对于数据库来说,查询是数据库的灵魂,那么SQL查询效率究竟效率如何呢?下文将带对SQL查询的相关问题进行讨论,供您参考。
蒙在股里 该用户已被删除
8#
发表于 2015-3-20 02:33:12 | 只看该作者
而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-29 10:25

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表