我一直在使用循环准备一个过程,根据变量的值创建新列。无论何时运行该过程,它都会创建一个名为" cntr,"的列。而不是cntr的值。这是代码:
BEGIN
Declare cntr INT Default 0;
looper: LOOP
set cntr = cntr + 1;
if cntr = 334 THEN
leave looper;
end if;
alter table hour_time_stamp
add column cntr int;
insert into hour_time_stamp (cntr)
select truncate(time_stamp/3600000000000,0) from `events`
where unit_id=cntr
order by time_stamp DESC;
END loop looper;
END
有人知道如何将列命名为变量的值吗?
答案 0 :(得分:0)
您需要执行动态sql。构造一个包含所需命令的字符串加上cntr的值,然后在其上调用execute。例如:
execute 'alter table hour_time_stamp
add column ' + cntr + ' int';
要插入列,您必须以类似方式构造insert语句。
出于调试目的,可能有助于将两个sql字符串保存到varchar变量中并将其打印出来以确保它们保存cntr值。
答案 1 :(得分:0)
结合使用set
,concat
,prepare
和execute
,可以使用变量替换列名称:
set @myvar ='MyColumn';
set @s = CONCAT("SELECT 'test' ", @myvar);
prepare stmt from @s;
execute stmt;