2015-04-03 34 views
0

我有,我有以下行(由为例),默认情况下创建一个MySQL数据库(ID,任务和情况可能会有所不同,但目前的值总是)MySQL的程序出了错




我必须用insert语句(新行)随机创建这样的行。正如你所看到的日期被填充和德电流等于



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

所以我在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);

钍e行未更新,但我没有任何错误消息。

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

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