MySQL 程序出错
MySQL procedure gone wrong
我有一个 MySQL 数据库,其中我默认创建了以下行(例如)(id、任务和案例可能不同,但当前值始终是 1)
....idtaskcaseuser............datecurrent
238......31001.....0..............null..........1
239......41001.....0..............null..........1
我必须使用插入语句(新行)随机创建这样的行。如您所见,日期已填写且当前等于 0
....idtaskcaseuser............datecurrent
240......51001.....12015.04.03..........0
241......21002.....12015.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 ;
我使用计数来查看是否已经有具有相同案例和任务的行。如果是真的 (test=1) 我使用 UPDATE,否则使用 INSERT.
如果我用数据库中已经写入的下一行进行测试
....idtaskcaseuserdatecurrent
241......41001.....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 数据库,其中我默认创建了以下行(例如)(id、任务和案例可能不同,但当前值始终是 1)
....idtaskcaseuser............datecurrent
238......31001.....0..............null..........1
239......41001.....0..............null..........1
我必须使用插入语句(新行)随机创建这样的行。如您所见,日期已填写且当前等于 0
....idtaskcaseuser............datecurrent
240......51001.....12015.04.03..........0
241......21002.....12015.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 ;
我使用计数来查看是否已经有具有相同案例和任务的行。如果是真的 (test=1) 我使用 UPDATE,否则使用 INSERT.
如果我用数据库中已经写入的下一行进行测试
....idtaskcaseuserdatecurrent
241......41001.....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" 参数。