Oracle数据库批量更新某列数据

先讲下我遇到的情况:

 有一张表a,已经存在一个字段该字段是date类型,需求将该字段改为varchar2()类型,我们都知道,

Oracle在该字段有值情况是不可以更新数据的,如果你不在乎该字段在表中位置变化的话,可以方法一操作:

方法一:新增一个字段,然后把原列数据复制到这个列下,然后把原字段删除,把新增的字段重命名。

如果不想改变列位置但需要改变类型,请看下面:

oracle支持快速游标,不需要定义直接把游标写到for循环中,这样就方便了我们批量更新数据。

再加上oraclerowid物理字段(oracle默认给每个表都有rowid这个字段,并且是唯一索引),可以快速定位到要更新的记录上。


begin  
  for cr in (select a.rowid,b.yqrq from temp_jhgl a,zj_jhgl b where a.id = b.id) loop
    update temp_jhgl set yqrq = to_char(cr.yqrq,'yyyy/MM/dd') where rowid = cr.rowid;
    end loop;
    end;
使用快速游标的好处很多,可以支持复杂的查询语句,更新准确,无论数据多大更新效率仍然高,但执行后不返回影响行数。






你可能感兴趣的:(数据库,oracle)