首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误过程MYSQL

错误过程MYSQL
EN

Stack Overflow用户
提问于 2015-11-26 19:28:50
回答 1查看 26关注 0票数 0

我在一个兽医诊所的数据库里建立了一个程序。

该程序应为每只正在服用的特定动物添加10包药物(该动物由id (“动物”)识别,即程序的输入参数),且在临床中不存在的数量超过5个包。(表“PhysicalDrug”中有临床使用的药物包装。)

换句话说,表中的“处方”中的所有药物都是给那些列“End_date”为空或将来是零的动物开的,而且在诊所里几乎没有包装。

我所做的程序只适用于第一张尊重上面列出的条件的记录,但是跳过了其他的,我不知道为什么,你能帮我吗?非常感谢!(对不起,我英语不好,>.<)

代码语言:javascript
运行
复制
  CREATE PROCEDURE add_Drug(IN animal INTEGER)
  BEGIN
    DECLARE Code VARCHAR(30);
    DECLARE i, eof INT DEFAULT 0;

    DECLARE cdrugs CURSOR FOR 
      SELECT P.Code_drug 
        FROM   Prescription P
        WHERE  P.Id_animal = animal
          AND (P.End_date IS NULL OR P.End_date >= CURDATE());

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET eof = 1;

    # the function counter returns the greater id of the table PhysicalDrug incremented by one
    SET @Id = counter();
    OPEN cdrugs;
    read_loop: LOOP
      FETCH cdrugs INTO Code;
      IF eof = 1 THEN
        LEAVE read_loop;
      END IF;
      #Memorize the number of units of the drug present in the clinic 
      SET @NumberDrug =
        (SELECT COUNT(*) 
          FROM PhysicalDrug
          WHERE Code_drug = Code);
      IF @NumberDrug < 5 THEN
        WHILE i < 10 DO
          INSERT INTO PhysicalDrug (Id, Code_drug)
            VALUES (@Id, Code);
          SET i = i + 1;
          SET @Id = @Id + 1;
        END WHILE;
      END IF;
    END LOOP;
    CLOSE cdrug;
  END //
  DELIMITER ;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-26 20:55:12

代码的重新格式化揭示了答案:在头10次遍历i.之后,您的永远不会重置计数器在此之后,i < 10始终是假的,因此您再也不会进入INSERT循环。

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

https://stackoverflow.com/questions/33945818

复制
相关文章

相似问题

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