我在一个兽医诊所的数据库里建立了一个程序。
该程序应为每只正在服用的特定动物添加10包药物(该动物由id (“动物”)识别,即程序的输入参数),且在临床中不存在的数量超过5个包。(表“PhysicalDrug”中有临床使用的药物包装。)
换句话说,表中的“处方”中的所有药物都是给那些列“End_date”为空或将来是零的动物开的,而且在诊所里几乎没有包装。
我所做的程序只适用于第一张尊重上面列出的条件的记录,但是跳过了其他的,我不知道为什么,你能帮我吗?非常感谢!(对不起,我英语不好,>.<)
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 ;
发布于 2015-11-26 12:55:12
代码的重新格式化揭示了答案:在头10次遍历i
.之后,您的永远不会重置计数器在此之后,i < 10
始终是假的,因此您再也不会进入INSERT
循环。
https://stackoverflow.com/questions/33945818
复制相似问题