MySQL程序出错了

时间:2015-04-03 09:49:58

标签: mysql procedure

我有一个MySQL数据库,其中我默认创建了以下行(例如)(id,task和case可能不同,但当前值总是 1




我必须使用insert语句(新行)随机创建这样的行。如您所见,日期已填充且当前等于 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 ;

我使用count来查看是否已经有一个具有相同case和task的行。如果是真的(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;

它就像一个魅力。

插入查询也可以正常工作。

1 个答案:

答案 0 :(得分:1)

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