求一条批量更新的sql( update ... select )

无爱大叔 2010-02-25 05:43:23
某程序中每次修改都需要遍历对应条件的记录进行批量更新
如下sql语句:
update mytable set ksbh=(select '20100203'||ltrim(to_char(rownum,'00')) from mytable
where to_char(kssj,'yyyy-mm-dd')='2010-02-03' order by kssj asc)
where to_char(kssj,'yyyy-mm-dd')='2010-02-03'
当然这是错误的sql语句,我想实现的是更新mytable表中日期为2010-02-03的记录的ksbh字段的值为:
年月日+2位的序号 我用了rownum按kssj(日期字段)正序排序,这条sql语句如何写?请指点迷津
...全文
580 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
无爱大叔 2010-02-26
  • 打赏
  • 举报
回复
谢谢tangren的答案,结贴
zhangwonderful 2010-02-26
  • 打赏
  • 举报
回复
引用 5 楼 tangren 的回复:
SQL code--不用过程试一下update mytable aset ksbh=
(select rnfrom (select rwd,
to_char(kssj,'yyyymmdd')||
lpad(to_char(rownum),2,'0') rnfrom (select rowid rwd, t.*from mytable twhere to_char(kssj,'yyyy-mm-dd')='2010-02-03'orderby kssj)) bwhere b.rwd= a.rowid)where to_char(kssj,'yyyy-mm-dd')='2010-02-03'

方法可行
tangren 2010-02-25
  • 打赏
  • 举报
回复
--不用过程试一下
update mytable a
set ksbh =
(select rn
from (select rwd,
to_char(kssj, 'yyyymmdd') ||
lpad(to_char(rownum), 2, '0') rn
from (select rowid rwd, t.*
from mytable t
where to_char(kssj, 'yyyy-mm-dd') = '2010-02-03'
order by kssj)) b
where b.rwd = a.rowid)
where to_char(kssj, 'yyyy-mm-dd') = '2010-02-03'
碧水幽幽泉 2010-02-25
  • 打赏
  • 举报
回复
忘记commit了,呵呵!
create or replace procedure p_mytable_update
is
begin

for i in 0..99 loop

update mytable
set ksbh=(
select '20100203'||lpad(i, 2, 0)
from dual
)
where to_char(kssj,'yyyy-mm-dd')='2010-02-03' order by kssj asc;

end loop;

commit;
end;
碧水幽幽泉 2010-02-25
  • 打赏
  • 举报
回复
引用 2 楼 xhbmj 的回复:
请问下过程要怎么写???????????
create or replace procedure p_mytable_update
is
begin

for i in 0..99 loop

update mytable
set ksbh=(
select '20100203'||lpad(i, 2, 0)
from dual
)
where to_char(kssj,'yyyy-mm-dd')='2010-02-03' order by kssj asc;

end loop;
end;
无爱大叔 2010-02-25
  • 打赏
  • 举报
回复
请问下过程要怎么写???????????
Phoenix_99 2010-02-25
  • 打赏
  • 举报
回复
用过程,因为2位序号是可变的,用循环来控制

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧