不积跬步,无以至千里

博客园 首页 新随笔 联系 订阅 管理

有一个这样的需求,之前有一个表A,导出了表A中的一部分数据,然后对于这部分数据进行了一些修改,比如修改了运输时间、运输方式啥的,主键都是订单号。现在,需要将修改后的数据重新更新到表A中,这个时候肯定想到的是update,但是一个一个的update显然不现实,而且也完全没有必要这样去做。

实现上面的这个需求,可以首先建个表B,存储修改了表A的部分数据,然后使用游标一个个的将表B中的数据更新到表A中,实现代码大概如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
DECLARE
  CURSOR csr_data IS
    SELECT FROM B;
BEGIN
  FOR rec IN csr_data LOOP
    UPDATE A
       SET A.start_transit_time = rec.start_transit_time, -- 这里设置的是要更改的列
   A.supplier = rec.supplier,
           A.transit_name       = rec.transit_name,
           A.transit_type       = rec.transit_type
     WHERE A.order_no = rec.order_no; -- 这里是可以作为唯一性区分的列
  END LOOP;
END;

上面的代码是实现的批量更新,后来我又想到了批量插入和批量删除,发现就没有必要用游标这样去做了。如果要批量插入,可以参考《Oracle insert插入语句总结:单条插入与多条插入》这篇文章,如果要批量删除的话,就直接delete就OK了。

posted on 2015-12-29 17:40  Zeroassetsor  阅读(1397)  评论(0)    收藏  举报