我有5列名称 - value1,value2 ... value5
我有一个迭代5次的while循环并且在每次迭代中我试图在每个列中插入一个值,即5个插入到5个不同的行中。因此,在每个插入中,我只插入1列,其他插入默认为NULL。
我做过这样的事情,但是没有用。我收到错误:错误代码:1054。'字段列表'中的未知列'insert_value'
set loop_counter = 1;
set loop_limit = 5;
while loop_counter < loop_limit do
set insert_value = concat('value', loop_counter);
insert into values_table (insert_value) values (insert_value);
end while;
所有这些代码都在一个传递5个参数的函数中 - value1..value5。
因此,在insert语句中,我正在尝试生成列名,还需要指定需要插入的值。
我意识到插入是错误的,但我不知道该怎么做。
有关如何执行此操作的任何建议吗?
答案 0 :(得分:0)
您的代码无效的原因是您不能只使用concat()
填充column_name。为了完成您的任务,您需要Prepared Statements
。
以下查询将完成工作:
CREATE PROCEDURE ins()
BEGIN
DECLARE i int DEFAULT 1;
WHILE i <= 5 DO
set @q := (select concat("Insert into t(",concat('value', i),") values('",concat('value', i),"')"));
prepare s1 from @q;
execute s1;
deallocate prepare s1;
SET i = i + 1;
END WHILE;
END;
CALL ins();
SELECT *FROM t;
结果:
value1 value2 value3 value4 value5
------------------------------------------------
value1 NULL NULL NULL NULL
NULL value2 NULL NULL NULL
NULL NULL value3 NULL NULL
NULL NULL NULL value4 NULL
NULL NULL NULL NULL value5
希望它有所帮助!