|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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的误解,不过同样也有一些是合情合理的。 |
|