【发布时间】:2021-05-24 23:50:38
【问题描述】:
我创建了一个循环遍历表并将结果连接到变量中的例程。该变量稍后与 PREPARE 和 EXECUTE 一起使用,一次性插入一堆行。
BEGIN
DECLARE fetched_name VARCHAR(32);
DECLARE loop_finished TINYINT(1) UNSIGNED DEFAULT 0;
DECLARE loop_cursor CURSOR FOR SELECT name FROM first_example_table;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET loop_finished = 1;
SET @insert_entry = NULL;
OPEN loop_cursor;
looping: LOOP
FETCH loop_cursor INTO fetched_name;
IF
loop_finished = 1
THEN
LEAVE looping;
END IF;
SET @insert_list = CONCAT_WS("), (", @insert_list, fetched_name);
END LOOP;
CLOSE loop_cursor;
SET @insert_list = CONCAT("INSERT INTO second_example_temple (name) VALUES (", @insert_list, ")");
PREPARE insert_query FROM @insert_list;
EXECUTE insert_query;
END
到目前为止,这实际上可以按预期工作。但是,问题是准备好的查询包含不带引号的值,如下所示:
INSERT INTO second_example_temple (name) VALUES (Bill), (Peter), (Tom);
MySQL 拒绝对缺少引号的查询,它希望查询看起来像这样:
INSERT INTO second_example_temple (name) VALUES ("Bill"), ("Peter"), ("Tom");
对于这个问题有什么好的解决方法吗?理想情况下不手动设置引号并且不使用 CONCAT 或 CONCAT_WS,因为在名称旁边设置更多字段时会变得非常复杂。
【问题讨论】:
标签: mysql loops cursor quotes declare