MySQL 程序出错

MySQL procedure gone wrong

我有一个 MySQL 数据库,其中我默认创建了以下行(例如)(id、任务和案例可能不同,但当前值始终是 1)




我必须使用插入语句(新行)随机创建这样的行。如您所见,日期已填写且当前等于 0



当我遇到默认创建的行之一时,我想使用更新而不是插入语句。

所以我在 MySQL

中创建了以下过程
DELIMITER //
DROP PROCEDURE IF EXISTS FillProgress//
CREATE PROCEDURE FillProgress ( get_case INT(10),get_task INT(10), get_user INT(10) )

BEGIN

   DECLARE test tinyint(1);

   SET test = (SELECT COUNT(*) FROM progress WHERE case_id = get_case AND task_id = get_task);

   IF test = 1 THEN 
        UPDATE progress SET current = 0, date = NOW(), user_id = get_user WHERE task_id = get_id AND case_id = get_case;
   ELSE 
        INSERT INTO progress(task_id,case_id,user_id,date,current) VALUES (get_task,get_case,get_user,NOW(),0);
   END IF;

END; //

DELIMITER ;

我使用计数来查看是否已经有具有相同案例和任务的行。如果是真的 (test=1) 我使用 UPDATE,否则使用 INSERT.

如果我用数据库中已经写入的下一行进行测试


我用CALL FillProgress(1001,4,1);

该行未更新,但我没有收到任何错误消息。

11:38:02    CALL FillProgress(1001,4,1) 0 row(s) affected   0.000 sec

如果我手动使用我的更新查询

UPDATE progress SET current = 0, date = NOW(), user_id = 1 WHERE task_id = 4 AND case_id = 1001;

它就像一个魅力。

插入查询也能正常工作。

过程中的 UPDATE 查询有一个 "WHERE task_id = get_id" 子句,但是我没有看到过程中定义了 get_id;不过,存储过程有一个 "get_task" 参数。