我现在有个需求
一张表当中含有多个字段,并且有规律
例如: 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
我不知道是我拼的有问题,还是根本就不支持这么拼,请解答,谢谢各位
oraclesql

解决方案 »

  1.   

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

  2.   


    不行,还是missing equal sign 这个错误
      

  3.   

    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;
    /
      

  4.   

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

  5.   

    ibatis 里面也可以这样写吗?
      

  6.   

    ibitis 里面也可以这样写吗?