首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySql数据集中使用for循环

问在MySql数据集中使用for循环
EN

Stack Overflow用户
提问于 2013-05-28 12:36:24
回答 2查看 351关注 0票数 0

如何在MySQL数据集中使用for循环?

代码语言:javascript
复制
FOR x IN (SELECT column FROM table_name WHERE column_2 = input_val) 
LOOP
    sum_total := sum_total + x.column ;
END LOOP;

这是我用来在oracle中循环数据集的一个例子。

如何在MySql中实现这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-28 12:45:16

完全不循环怎么样?毕竟它是SQL。

代码语言:javascript
复制
SELECT SUM(`column`) total
  FROM table_name 
  WHERE column_2 = <input_val>

否则,请使用CURSOR

现在,使用CURSOR的等效循环将如下所示

代码语言:javascript
复制
DELIMITER $$
CREATE PROCEDURE sp_loop(IN input_val INT)
BEGIN
  DECLARE done INT DEFAULT FALSE;
  DECLARE sum_current, sum_total INT DEFAULT 0;
  DECLARE cur1 CURSOR FOR SELECT column1 FROM table_name WHERE column2 = input_val;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

  OPEN cur1;

  read_loop: LOOP
    FETCH cur1 INTO sum_current;
    IF done THEN
      LEAVE read_loop;
    END IF;
    SET sum_total = sum_total + sum_current;
  END LOOP;

  CLOSE cur1;
  SELECT sum_total;
END$$
DELIMITER ;

这是

票数 3
EN

Stack Overflow用户

发布于 2013-05-28 12:52:57

代码语言:javascript
复制
DROP PROCEDURE IF EXISTS  `foo`.`usp_cursor_example`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `foo`.`usp_cursor_example`(
  IN name_in VARCHAR(255)
)
READS SQL DATA
BEGIN

  DECLARE name_val VARCHAR(255);
  DECLARE status_update_val VARCHAR(255);

  -- Declare variables used just for cursor and loop control
  DECLARE no_more_rows BOOLEAN;
  DECLARE loop_cntr INT DEFAULT 0;
  DECLARE num_rows INT DEFAULT 0;

  -- Declare the cursor
  DECLARE friends_cur CURSOR FOR
    SELECT
        name
      , status_update
    FROM foo.friend_status
    WHERE name = name_in;

  -- Declare 'handlers' for exceptions
  DECLARE CONTINUE HANDLER FOR NOT FOUND
    SET no_more_rows = TRUE;


  OPEN friends_cur;
  select FOUND_ROWS() into num_rows;

  the_loop: LOOP

    FETCH  friends_cur
    INTO   name_val
    ,      status_update_val;


    IF no_more_rows THEN
        CLOSE friends_cur;
        LEAVE the_loop;
    END IF;

    select name_val, status_update_val;

    -- count the number of times looped
    SET loop_cntr = loop_cntr + 1;

  END LOOP the_loop;

  -- 'print' the output so we can see they are the same
  select num_rows, loop_cntr;

END
DELIMITER ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16783944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档