MySQL中基于SQL in的循环in函数



我想写一个SQL函数,它通过SQL查询返回的记录列表(只有整数id),并使用这些参数执行另一个函数:

  • 我不想枚举所有的id手工,即我想让他们首先由SQL查询返回,所以SET @recordlist = (SELECT ..),
  • 我想有一个循环,为记录列表的每个元素执行另一个函数,即我希望能够在for语句中访问记录列表中的每个单个元素

它应该看起来像:

SET @recordlist = (SELECT ..)
For every element e in the recordlist
Execute function f(e)

使用带有循环游标的例程来实现这一点!

   delimiter//
    create procedure get_balance()
    begin
    DECLARE var1;
    DECLARE flag INT DEFAULT 0;
    .......
       declare tcursor for select col1,col2.... from table;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag = 1;
    open tcursor;
    myloop:LOOP
    fetch tcursor into col1,col2...;
    if flag = 1 then
    -- function here 
    call funtion;
    leave myloop;
    end if
    end loop myloop;
    close tcursor;
    end//
    delimiter;

我使用以下代码使其工作。复制&粘贴,更改查询和函数名。

   DELIMITER $$
    DROP PROCEDURE IF EXISTS `my`$$
    CREATE PROCEDURE `my`()
    BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE i INTEGER;
    DECLARE curs1 CURSOR FOR SELECT DISTINCT `myval` FROM my_table;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    OPEN curs1;
    read_loop: LOOP
    FETCH curs1 INTO i;
    IF done THEN
    LEAVE read_loop;
    END IF;
    SELECT myfunc(i);
    END LOOP;
    CLOSE curs1;
    END$$
    DELIMITER ;

最新更新