> 데이터 베이스 > MySQL 튜토리얼 > MySQL存储过程例子,包含事务,参数,嵌套调用,游标,循环等_MySQL

MySQL存储过程例子,包含事务,参数,嵌套调用,游标,循环等_MySQL

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-06-01 13:54:37
원래의
976명이 탐색했습니다.

view plaincopy to clipboardprint?
drop procedure if exists pro_rep_shadow_rs;  
delimiter |  
----------------------------------  
-- rep_shadow_rs  
-- 用来处理信息的增加,更新和删除  
-- 每次只更新上次以来没有做过的数据  
-- 根据不同的标志位  
-- 需要一个输出的参数,  
-- 如果返回为0,则调用失败,事务回滚  
-- 如果返回为1,调用成功,事务提交  
--  
-- 测试方法  
-- call pro_rep_shadow_rs(@rtn);  
-- select @rtn;  
----------------------------------  
create procedure pro_rep_shadow_rs(out rtn int)  
begin  
    -- 声明变量,所有的声明必须在非声明的语句前面  
    declare iLast_rep_sync_id int default -1;  
    declare iMax_rep_sync_id int default -1;  
    -- 如果出现异常,或自动处理并rollback,但不再通知调用方了  
    -- 如果希望应用获得异常,需要将下面这一句,以及启动事务和提交事务的语句全部去掉  
    declare exit handler for sqlexception rollback;  
    -- 查找上一次的  
    select eid into iLast_rep_sync_id from rep_de_proc_log where tbl='rep_shadow_rs';  
    -- 如果不存在,则增加一行  
    if iLast_rep_sync_id=-1 then  
      insert into rep_de_proc_log(rid,eid,tbl) values(0,0,'rep_shadow_rs');  
      set iLast_rep_sync_id = 0;  
    end if;  
      
    -- 下一个数字  
    set iLast_rep_sync_id=iLast_rep_sync_id+1;  
    -- 设置默认的返回值为0:失败  
    set rtn=0;  
      
    -- 启动事务  
    start transaction;  
    -- 查找最大编号  
    select max(rep_sync_id) into iMax_rep_sync_id from rep_shadow_rs;  
    -- 有新数据  
    if iMax_rep_sync_id>=iLast_rep_sync_id then  
        -- 调用  
        call pro_rep_shadow_rs_do(iLast_rep_sync_id,iMax_rep_sync_id);  
        -- 更新日志  
        update rep_de_proc_log set rid=iLast_rep_sync_id,eid=iMax_rep_sync_id where tbl='rep_shadow_rs';  
    end if;  
      
    -- 运行没有异常,提交事务  
    commit;  
    -- 设置返回值为1 
    set rtn=1;  
end;  
|  
delimiter ;  
drop procedure if exists pro_rep_shadow_rs_do;  
delimiter |  
---------------------------------  
-- 处理指定编号范围内的数据  
-- 需要输入2个参数  
-- last_rep_sync_id 是编号的最小值  
-- max_rep_sync_id 是编号的最大值  
-- 无返回值  

관련 라벨:
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿