日期:2014-05-17  浏览次数:20659 次

Oracle 拼接字符串的问题 在线等
我现在有个需求
一张表当中含有多个字段,并且有规律
例如: table中有day1,day2,day3,day4,day5 ... day 31 字段
我现在要对这个表的数据进行修改 在dto中建立day1 ... day31 太过麻烦
所以我只定义了一个属性num 代表day后面的数字,想要在sql中动态拼接
我是这么拼的:
update table set concat('day',#num#) = 5 where id=1
但是出现错误 提示指向concat函数,提示missing equal sign
我不知道是我拼的有问题,还是根本就不支持这么拼,请解答,谢谢各位
oracle sql

------解决方案--------------------
这样拼的话,执行语句的有问题吧,如果num=1,执行语句是 update table set 'day1' = 5 where id=1 。可以用这个替换一下执行语句 execute immediate ' update table set day'
------解决方案--------------------
num
------解决方案--------------------
' = 5 where id=1' ;
------解决方案--------------------
begin
execute immediate 'update table set day'
------解决方案--------------------
num
------解决方案--------------------
' = 5 where id=1' ;
end;
/
即可

规范些的话:
declare
  v_sql  varchar2(200);
begin
  v_sql := 'update table_name set day'
------解决方案--------------------
num
------解决方案--------------------
' = 5 where id=1'
  execute immediate v_sql;
  --commit;
end;
/


------解决方案--------------------
声明一个varchar2变量days 
days = day
------解决方案--------------------
num或days= concat('day',#num#) 
update table set  days= 5 where id=1