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

....id task case user ............date current
238 ......3 1001 .....0 ..............null ..........1
239 ......4 1001 .....0 ..............null ..........1

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

....id task case user ............date current
240 ......5 1001 .....1 2015.04.03 ..........0
241 ......2 1002 .....1 2015.04.03 ..........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来查看是否已经有一行具有相同的大小写和任务。如果为true(test = 1),则使用UPDATE,否则使用INSERT。

如果我测试下面的行已经写在数据库中

....id task case user date current
241 ......4 1001 .....0 ..null ..........1

我使用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”参数。

关于mysql - MySQL过程出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29429849/

10-16 14:58