起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3710|回复: 0

[分享] mysql在触发器里使用游标

[复制链接]

851

主题

2560

帖子

5714

积分

论坛元老

Rank: 8Rank: 8

积分
5714
QQ
发表于 2018-2-3 19:07:19 | 显示全部楼层 |阅读模式
本帖最后由 wgs7909 于 2018-2-3 19:09 编辑

BEGIN
    DECLARE QRCODE VARCHAR(32);
    DECLARE DTALFID VARCHAR(32);
    DECLARE FINDEX VARCHAR(10);
    DECLARE PHONEQRCODE VARCHAR(32);
    DECLARE PHONECLASSID VARCHAR(32);
    DECLARE SEQUENCENO VARCHAR(32);
    DECLARE STATEINFO VARCHAR(64);
    DECLARE STATEINFOKO  VARCHAR(64);
    DECLARE UUID VARCHAR(32);
    DECLARE IS_FOUND INTEGER DEFAULT 1;
    /*定义一个游标,把查询的结果临时放在游标变量里。*/
    DECLARE  DTL CURSOR FOR SELECT FID, FPHONEQRCODE, FPHONECLASSID, FSEQUENCENO, FSTATEINFO, FSTATEINFOKO, FFINDEX FROM  PH_INVOICEDETAIL  WHERE FMASTERID = NEW.FID ;
    /*在MYSQL里,定义完游标后,一定要给游标增加一个句柄,当游标下一条为空时触发,并且可以给IS_FOUND重新赋值*/
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET IS_FOUND=0;
    IF( NEW.fInvocieType='收购单' and (NEW.FISUNAUDIT='反审核完成' or NEW.FISINWH='是')) THEN
/*当游标被打开时,执行SELECT查询*/
    OPEN DTL;
/*取游标的第一条记录,把值赋给变量*/
        FETCH DTL INTO DTALFID, PHONEQRCODE, PHONECLASSID, SEQUENCENO, STATEINFO, STATEINFOKO, FINDEX;
        WHILE( IS_FOUND = 1 ) DO
            IF( FINDEX = 1 ) THEN
              UPDATE PH_PHONEINFO INFO SET INFO.fPhoneClassID=PhoneClassID, INFO.fSequenceNo=SequenceNo, INFO.fStateInfo=StateInfo, INFO.fStateInfoKO=StateInfoKO,fIndexNo=fIndexNo+1
              WHERE INFO.FPHONEQRCODE = PHONEQRCODE;
            ELSE
              SET UUID := REPLACE( UUID(), '-', '');
              UPDATE PH_INVOICEDETAIL SET FPHONEID = UUID,FFINDEX = '1' WHERE FID = DTALFID;
              INSERT INTO PH_PHONEINFO (FID, VERSION, FPHONECLASSID, FINDEXNO, FSEQUENCENO, FPHONEQRCODE, FSTATEINFO, FSTATEINFOKO, FISDEL, FINVOICESNUMBER, FPHONESTATUS, FPOSITIONSTATE,FCREATETIME)
                                                 VALUES(UUID, 0, PHONECLASSID, '999', SEQUENCENO, PHONEQRCODE, STATEINFO, STATEINFOKO, 0, OLD.FINVOICESNUMBER, '未销售', OLD.FPOSITIONSTATE, CURRENT_TIMESTAMP());
           END IF; /*取下一条记录,把值赋给变量*/
           FETCH DTL INTO DTALFID, PHONEQRCODE, PHONECLASSID, SEQUENCENO, STATEINFO, STATEINFOKO, FINDEX;
        END WHILE;
/*游标使用完以后,一定要关闭*/
    CLOSE DTL;
  END IF;
END


企业应用定制开发。X5开发者。
手机:15065117236
QQ:87356667
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-4-20 21:31 , Processed in 0.055025 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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