需要存储过程按照表列每天向表里更新一条数据

时间:2022-11-01 05:59:42
如图所示;
目前我有  kehhao,zhangh,zhhuye,shij 等四列的信息
我需要将zhhuye 列的信息,更新到day01,day02......day32 这些列里,
但是每天我只更新一列 比如今天是5号,就更新day05的列。
然后按照每月每天进行更新,就是每天向day01,day02......day32 这些列里更新一列zhhuye的信息。

请问存储过程应该如何写?

需要存储过程按照表列每天向表里更新一条数据

5 个解决方案

#1



-- 使用动态 SQL 

declare 
    v_sql varchar2(100);
begin
    v_sql := 'update t set day' || to_char(sysdate,'dd') || ' = hehhao where ....';
    execute immediate v_sql;
end;

-- 如果你用程序实现,也是直接拼接。

#2


好像不对呢,没有更新day01 后面的列呢??我要将zhhuye这一列的信息更新到后面

#3



--可以采用动态SQL,你的表名为: CDR
--1.不带条件更新
declare 
    v_sql varchar2(200);
begin
    v_sql := 'update cdr set day' || to_char(sysdate,'dd') || ' = zhhuye';
    execute immediate v_sql;
commit;
end;
/
--2.带条件更新
declare 
    v_sql varchar2(200);
begin
    v_sql := 'update cdr set day' || to_char(sysdate,'dd') || ' = zhhuye where ....';
    execute immediate v_sql;
commit;
end;
/

#4


引用 2 楼 weixin_39128424 的回复:
好像不对呢,没有更新day01 后面的列呢??我要将zhhuye这一列的信息更新到后面

不是每次只更新一列吗?
即1号更新day01列,2号更新day02列。。。。。
那1楼的就没问题!

#5


可以了,感谢三位老师。

#1



-- 使用动态 SQL 

declare 
    v_sql varchar2(100);
begin
    v_sql := 'update t set day' || to_char(sysdate,'dd') || ' = hehhao where ....';
    execute immediate v_sql;
end;

-- 如果你用程序实现,也是直接拼接。

#2


好像不对呢,没有更新day01 后面的列呢??我要将zhhuye这一列的信息更新到后面

#3



--可以采用动态SQL,你的表名为: CDR
--1.不带条件更新
declare 
    v_sql varchar2(200);
begin
    v_sql := 'update cdr set day' || to_char(sysdate,'dd') || ' = zhhuye';
    execute immediate v_sql;
commit;
end;
/
--2.带条件更新
declare 
    v_sql varchar2(200);
begin
    v_sql := 'update cdr set day' || to_char(sysdate,'dd') || ' = zhhuye where ....';
    execute immediate v_sql;
commit;
end;
/

#4


引用 2 楼 weixin_39128424 的回复:
好像不对呢,没有更新day01 后面的列呢??我要将zhhuye这一列的信息更新到后面

不是每次只更新一列吗?
即1号更新day01列,2号更新day02列。。。。。
那1楼的就没问题!

#5


可以了,感谢三位老师。