因此,我有一个名为open_loop的游标,它执行查询,现在我想遍历它,检查它持有的值是否存在于数据库中,如果存在,我需要更新该条目,如果不存在,则插入它。
问题是,我退出循环的方式是等待状态02000,即:Success, but no rows found。不幸的是,如果用户表中没有条目,也会发生这种情况,因此循环会立即被切断!如何才能使它不触发该事件,但仍然在loop_cur耗尽条目时触发,或者找到退出循环的不同方法?
我的代码如下:
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
OPEN loop_cur;
REPEAT
FETCH loop_cur
INTO user_id, user_info
SELECT Id INTO user_id FROM users WHERE Id = user_id;
IF user_id IS NOT NULL THEN
UPDATE users
SET info = user_info
WHERE Id = user_id;
ELSE
INSERT INTO users (user_info);
END IF;
UNTIL done END REPEAT;
CLOSE loop_cur;请注意,这被简化了,因为我实际上插入和获取了更多的值,并且loop_cur的查询非常复杂,所以我没有包括它,但它确实可以工作。
最后,我不能在重复键更新时使用INSERT,我检查的并不是一个真正的user_id,它是一个不同的列,为了简单起见我使用了user_id。
发布于 2011-08-13 01:50:47
在循环中使用设置为true的布尔变量。
为简单起见,删除了不相关的代码:
DECLARE found boolean default false;
...
REPEAT
FETCH loop_cur ...
SET found = true;
...
UNTIL done END REPEAT;
-- found is now true if you got some rows, false otherwisehttps://stackoverflow.com/questions/7043097
复制相似问题