`
y806839048
  • 浏览: 1118625 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

mysql游标实现到了最后一个结束之后结束循环

阅读更多

游标实现到了最后一个结束之后 此时会抛出 not found 异常结合异常的时机设置可以使循环结束的标记值,结束循环

游标是用来存结果集的 

 存储过程设置的输出参数,在过程结束后自然会输出,你给它赋什么值,就输出什么

 

CREATE DEFINER = 'flexitm'@'%'

PROCEDURE financial_sales_debug.PD_CD_CHK(IN INPARA VARCHAR(1000),

   OUT OUTPARA  VARCHAR(1000)) 

 

BEGIN

 DECLARE V_ERRMSG VARCHAR(128);

 DECLARE fid VARCHAR(100);

 DECLARE str VARCHAR(100);

 declare tmpMobile varchar(20) default '' ;

 declare allMobile varchar(255) default '' ;

##获取待分派名单结果集

 declare cur1 CURSOR FOR SELECT MOBILE FROM tb_userinfo WHERE ISASSIGN is NULL  or ISASSIGN='' ;

 declare CONTINUE HANDLER FOR NOT FOUND SET tmpMobile = NULL;--结束循环

 declare CONTINUE HANDLER FOR SQLEXCEPTION SET V_ERRMSG = '002';--异常回滚

   OPEN cur1;

    FETCH cur1 INTO tmpMobile;

##遍历游标

   WHILE ( tmpMobile is not null) DO

    SET INPARA=tmpMobile;

  IF INPARA IS NULL  THEN

   SET V_ERRMSG ='传入参数错误';

     ELSE

   ##  FETCH cur1 INTO tmpMobile;

    ## SET INPARA=tmpMobile;

    ##获取归属关系

SET fid =(

 

 

SELECT

COALESCE (

COALESCE (COALESCE(l2.MOBILE, l4.MOBILE), l6.MOBILE),

l8.MOBILE

) MOBILE

FROM

tb_userinfo a LEFT JOIN tb_tele_userinfo l ON a.MOBILE=l.MOBILE

 

 

LEFT JOIN tb_userinfo b ON a.INVITER_INVITATION_CODE = b.INVITATION_CODE

LEFT JOIN tb_tele_userinfo l2 ON b.MOBILE=l2.MOBILE

 

LEFT JOIN tb_userinfo c ON b.INVITER_INVITATION_CODE = c.INVITATION_CODE

LEFT JOIN tb_tele_userinfo l4 ON c.MOBILE=l4.MOBILE

 

 

LEFT JOIN tb_userinfo d ON c.INVITER_INVITATION_CODE = d.INVITATION_CODE

LEFT JOIN tb_tele_userinfo l6 ON d.MOBILE=l6.MOBILE

 

LEFT JOIN tb_userinfo e ON d.INVITER_INVITATION_CODE = e.INVITATION_CODE

LEFT JOIN tb_tele_userinfo l8 ON e.MOBILE=l8.MOBILE

 

WHERE

a.MOBILE = INPARA  AND (l.ID is   null or l.ID ='')

AND (

(l8.MOBILE IS NOT NULL AND l8.MOBILE !='')

OR (l6.MOBILE IS NOT NULL AND l6.MOBILE !='')

OR (l4.MOBILE IS NOT NULL AND l4.MOBILE !='')

OR (l2.MOBILE IS NOT NULL AND l2.MOBILE !='')

)

);

 

IF fid is not null THEN

SET str = fid;

 

 

##通过归属id获取归属坐席,团队

    SELECT ID,TEMID INTO @empid ,@temid  FROM financial_sales_employment WHERE MOBILE=fid;

 

    IF (@empid IS NOT NULL) OR ( @temid IS NOT NULL) THEN

 

      SET @cnt = (SELECT COUNT(1) FROM financial_sales_order WHERE MOBILE=INPARA);

  ##自动导入的名单之前数据库已经存在,不处理,将这个理财表名单标记为已分派

      IF @cnt > 0 THEN

 

   ##UPDATE tb_userinfo SET RE_ID=str,ISASSIGN='1' WHERE MOBILE=INPARA;报异常

     UPDATE tb_userinfo SET RE_ID=str,ISASSIGN='1' WHERE MOBILE=INPARA;

     ELSE

 

    ##进行分派---还需要增加分派时间 开始事物

     START TRANSACTION;

    INSERT INTO financial_sales_order(MOBILE, REGISTER_TIME, CUSTOMER_NAME, ISINVEST,ORDER_TYPE,EMP_ID, TEM_ID, CREATED_TIME, ASSIGN_TIME) SELECT MOBILE, REG_TIME, CUSTOMER_NAME, ISINVEST, ORDER_TYPE,@empid, @temid,date(now()) ,date(now()) FROM tb_userinfo WHERE MOBILE=INPARA;

 

    ##更新理财电销名单状态

    UPDATE tb_userinfo SET RE_ID=str,ISASSIGN='1' WHERE MOBILE=INPARA;

        IF  V_ERRMSG = '002' THEN

         ROLLBACK;

        ELSE

         COMMIT;

       END IF;

 

    END IF;

 

 

 

 

      END IF;

 

  ELSE

   SET str = fid;

   SET V_ERRMSG ='仓单不存在!';

    END IF;

  END IF;

 

 

 

 

 

  SET OUTPARA = str;

   /*游标向下走一步*/

        FETCH cur1 INTO tmpMobile;

      END WHILE;

 CLOSE cur1;

END

分享到:
评论

相关推荐

    Mysql游标(循环操作)

    ### MySQL游标(循环操作) #### 一、游标简介 在MySQL中,游标是一种数据库对象,主要用于处理存储过程中的结果集。游标允许我们逐行地读取查询结果,这对于需要对每一行数据执行特定操作的情况非常有用。通过...

    mysql游标详解

    在实现游标循环时,需要定义一个标志变量来判断循环的结束条件,例如: DECLARE fetchSeqOk BOOLEAN; DECLARE _seqname VARCHAR(50); DECLARE _value BIGINT(20); DECLARE fetchSeqCursor CURSOR FOR SELECT ...

    mysql游标存储过程例子

    根据提供的文件信息,本文将详细解释一个MySQL存储过程的例子,其中包含了游标的使用。这个存储过程主要用于处理一批数据,涉及到日期范围内的数据处理、异常处理等。下面将逐一解析存储过程中涉及的重要知识点。 #...

    MySQL存储过程中游标循环的跳出和继续操作示例

    在`REPEAT`循环中,会先执行语句块,然后检查`expression`,直到`expression`为真时结束循环。如果`expression`一开始就为真,那么语句块不会被执行。 2. `WHILE`循环: ```sql WHILE expression DO Statements; ...

    Mysql存储过程循环内嵌套使用游标示例代码

    总结来说,这个示例展示了如何在MySQL存储过程中使用游标进行循环处理,并在循环内部再次嵌套游标以实现更精细的数据操作。这种技术在处理大量数据或执行复杂逻辑时非常有用,尤其是在需要逐行检查和处理数据的情况...

    MySql游标的使用实例

    以下是关于MySQL游标使用的一个详细说明: 1. **创建游标**: 创建游标首先需要声明一个游标变量,指定其将要遍历的SQL查询。例如: ```sql DECLARE calc_bonus CURSOR FOR SELECT id, salary, commission FROM ...

    mysql存储过程 游标 循环使用介绍

    在存储过程中,我们首先声明一个游标,然后打开它,通过FETCH语句获取当前行,进行处理,最后关闭游标。在MySQL中,游标的声明通常包括定义返回的列数据类型。例如: ```sql DECLARE feeCodeCursor CURSOR FOR ...

    seliencepuppet#mysql#20.mysql游标的创建1

    在MySQL当中的游标其实和java中的iterator迭代器这种类型类似,都是一个集合,然后通过循环遍历,游标现在是用来处理结果集的,首先要设置一个游标的结束

    游标例题 获取游标中的某一行

    在大多数数据库系统中,声明游标涉及定义一个游标变量并指定一个SQL查询。例如,在PL/SQL(Oracle的编程语言)中,声明游标可能如下所示: ```sql DECLARE my_cursor CURSOR FOR SELECT column1, column2 FROM ...

    MySQL游标概念与用法详解

    总之,MySQL游标是数据库编程中的一个重要工具,特别是在需要逐行处理数据或实现复杂的逻辑流程时。了解其概念和正确使用方法,能帮助开发者更有效地处理数据库中的数据。在实际应用中,应当根据具体情况权衡是否...

    mysql声明游标的方法

    定义一个名为`read_loop`的循环,通过`FETCH`语句将游标中的当前行赋值给变量`flag1`。 ```sql OPEN cur1; read_loop: LOOP FETCH cur1 INTO flag1; ``` 4. 处理游标数据: 在循环内部,我们可以对`flag1`...

    Mysql的游标的定义使用及关闭深入分析

    在本文中,我们将深入探讨MySQL游标的定义、使用以及关闭。 首先,让我们了解如何定义游标。在MySQL中,游标是通过DECLARE语句创建的,例如: ```sql DECLARE fetchSeqCursor CURSOR FOR SELECT seqname, value ...

    游标使用方法

    在这个存储过程中,我们首先声明了一个游标`c_table`,用于遍历`table_name`表中的所有记录。然后,我们使用`FETCH`获取每行数据,并将序列号`seq_id.NEXTVAL`插入到新的表`another_table`中。当没有更多数据可供...

    基于MySQL游标的具体使用详解

    `REPEAT`循环与`LOOP`类似,但通常与`UNTIL`一起使用,直到满足特定条件才结束循环。 总结来说,MySQL游标提供了一种灵活的方法来逐行处理查询结果,特别是在需要按需处理大量数据或执行复杂逻辑时。通过设置不同的...

    既简单,又使用的游标实例

    游标提供了灵活性,使得开发者可以在一个循环结构中处理每一行数据,而不是一次性获取所有数据。 游标的类型通常包括以下几种: 1. **只读游标**:只能读取数据,不能进行修改。 2. **可滚动游标**:可以在结果集中...

    MySQL实验报告5(存储过程与函数)(1)(1).pdf

    根据提供的文件内容,本篇实验报告主要围绕MySQL数据库中存储过程和函数的应用,涵盖了创建存储过程、函数、游标以及异常处理等高级特性。下面将详细解析报告中的每个知识点。 1. 创建存储过程 存储过程是一种在...

    Oracle到mysql的迁移步骤及各种注意事项_数据库.pdf

    /* 设置游标结束标志 */ DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; /* 定义游标 */ DECLARE cur_bdjl CURSOR FOR SELECT ...; ... END$$ DELIMITER ; ``` 数据类型的转换 在 Oracle 中,常用的...

Global site tag (gtag.js) - Google Analytics