【发布时间】:2014-11-21 02:04:45
【问题描述】:
我有这样的代码和 mysql 发布错误:
该行:FETCH cur_recycle_batch INTO @id, @created_by, @created_date; 发布错误。
有人知道为什么mysql不允许获取用户定义的变量吗?
CREATE DEFINER=`root`@`localhost` PROCEDURE `generate_row`()
BEGIN
DECLARE done TINYINT DEFAULT FALSE;
DECLARE cur_recycle_batch CURSOR FOR SELECT
id, created_by, created_date
FROM
outsourcing_recycle_batch
order by created_date;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
START transaction;
OPEN cur_recycle_batch;
insert_loop : loop
FETCH cur_recycle_batch INTO @id, @created_by, @created_date;
IF done THEN
LEAVE insert_loop;
END IF;
INSERT INTO `test_db`.`outsourcing_recycle_batch_history_list`
(`outsourcing_recycle_batch_pk`,
`outsourcing_history_pk`,
`created_by`,
`created_by_full_name`,
`created_date`)
VALUES
(@id,
1,
@created_by,
'AAAAAAAA',
@created_date);
END LOOP;
CLOSE cur_recycle_batch;
commit;
END
【问题讨论】:
-
基本上这似乎是一个设计问题。在这种情况下使用9.4 User-Defined Variables 有什么特别的原因吗?还要检查函数:LAST_INSERT_ID.
-
我在我的问题中使用了声明变量。我最初使用用户定义的变量是为了节省几行代码,但我只是好奇为什么 mysql 不允许这样做。 LAST_INSERT_ID 在这种情况下是可以的。感谢您的建议。
标签: mysql stored-procedures database-cursor