mysql - 在循环中使用 mysql 准备好的语句在执行第一个循环/循环后会中断循环

标签 mysql stored-procedures

我正在尝试动态访问表名称,并且有很多表,但它仅处理第一个表并且循环中断。知道我可能做错了什么

 PROCEDURE IF EXISTS pmms.TdevidendPaymentOnSavings;

  DELIMITER //


   CREATE PROCEDURE TdevidendPaymentOnSavings() READS SQL DATA BEGIN

     DECLARE accountNumber VARCHAR(30);DECLARE tableName VARCHAR(30);DECLARE 
     theAccountDate1 DATE;

     DECLARE anyDateInYear DATE;DECLARE rateUsed INTEGER;DECLARE lastDate 
     DATE;

    DECLARE ledgerBalance1 INTEGER;DECLARE amountComputed INTEGER;DECLARE 
    monthlySummations INTEGER;

   DECLARE monthlyTotals INTEGER DEFAULT 0; DECLARE l_done INTEGER;DECLARE 
    finalTotals INTEGER DEFAULT 0;

    DECLARE forSelectingAccountNumbers CURSOR FOR SELECT account_number  
  FROM 
   pmms.account_created_store WHERE account_number LIKE '05502%10';


      DECLARE CONTINUE HANDLER FOR NOT FOUND SET l_done=1;


   SET l_done=0;

  SELECT SavingsStartDate,SavingsRateUsed INTO anyDateInYear,rateUsed from 
    SavingsSharesComputationParameters;

    OPEN forSelectingAccountNumbers;


  accounts_loop: LOOP 

  FETCH forSelectingAccountNumbers into accountNumber;

  IF l_done=1 THEN

  LEAVE accounts_loop; 

    END IF;



  SET tableName=CONCAT('bsanca',accountNumber);

  CALL accountNma(accountNumber,@accountName);

  SELECT tableName,accountNumber;


  SET @sql_text1 = concat('SELECT ledger_balance INTO @ledgerBalance from  
 ',tableName,'  WHERE trn_date=@theAccountDate ORDER BY trn_id DESC LIMIT 
 1');

 SELECT @sql_text1;

 SELECT @ledgerBalance ;SELECT @theAccountDate;
 PREPARE stmt1 FROM @sql_text1;
 EXECUTE stmt1;
  DEALLOCATE PREPARE stmt1;

 END LOOP accounts_loop;

  SET l_done=0;

 CLOSE forSelectingAccountNumbers;

  END//

   DELIMITER ;

我已经检查了无数次,但似乎当我正确删除准备好的语句和循环时,否则我似乎没有发现问题。

请帮忙了解准备好的语句是否不能在循环中工作 在 mysql 程序中。

最佳答案

这两行颠倒过来。

END LOOP accounts_loop;

SET l_done=0;

您需要在END LOOP之前将l_done重置为FALSE(或0) - 因为SELECT 查询之后 FETCH 可以(不一定 - 但可以)还会触发 CONTINUE HANDLER 将其设置为 TRUE (1) 给出游标已耗尽的错误指示。

关于mysql - 在循环中使用 mysql 准备好的语句在执行第一个循环/循环后会中断循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54063644/

相关文章:

php - 无法显示图像和 html 文件 - laravel

sql-server - 如何从存储过程返回 ID 数组?

将 Bean 列表传递给 Oracle 存储过程的 Java 程序 - 一次性传递整个列表,而不是一个接一个地附加对象

sql-server - SQL Server 版本升级和缓存执行计划

mysql - MySQL SP 中的更新语句显示缺少结束错误

mysql - 提取连续模式超过阈值的行

mysql select 查询不适用于通过用户变量设置的限制和偏移量

mysql - SQL返回单行内连接

php - 如何解决这个问题:“警告:mysql_num_rows()期望参数1是资源,//中给出的 bool 值”?

sql - 执行存储过程时显示声明的变量值