我现在有一张如下的表:
ID ID2 ID3 Val      CREATEDATE 
5 1 2 0.05000000 2010-5-12 20:17:45 
6 2 2 0.50000000 2010-5-12 20:17:45 
7 3 2 0.41000000 2010-5-12 20:17:45 
8 4 2 0.04000000 2010-5-12 20:17:45 
9 1 3 0.00000000 2010-5-12 20:19:28 
10 2 3 0.40000000 2010-5-12 20:19:28 
11 3 3 0.56000000 2010-5-12 20:19:28 
12 4 3 0.04000000 2010-5-12 20:19:28 
13 1 4 0.00000000 2010-5-12 20:43:59 
14 2 4 0.22500000 2010-5-12 20:44:00 
15 3 4 0.72500000 2010-5-12 20:44:00 
16 4 4 0.05000000 2010-5-12 20:44:00 
17 1 5 0.00000000 2010-5-12 20:44:00 
18 2 5 0.10000000 2010-5-12 20:44:00 
19 3 5 0.85000000 2010-5-12 20:44:00 
20 4 5 0.05000000 2010-5-12 20:44:00 
1 1 1 0.15000000 2010-5-12 20:13:27 
2 2 1 0.57500000 2010-5-12 20:15:26 
3 3 1 0.27500000 2010-5-12 20:15:26 
4 4 1 0.00000000 2010-5-12 20:15:26
我想在一次提交中同时Update  id3=1 and id2=1的val=2,id3=1 and id2=2的val=8,id3=1 and id2=3的val=3,id3=1 and id2=4的val=4,要如何实现啊???

解决方案 »

  1.   

    UPDATE table1 t
       SET t.val = (CASE
                     WHEN id3 = 1 AND id2 = 1 THEN
                      2
                     WHEN id3 = 1 AND id2 = 2 THEN
                      8
                     WHEN id3 = 1 AND id2 = 3 THEN
                      3
                     WHEN id3 = 1 AND id2 = 4 THEN
                      4
                     ELSE
                      val
                   END);
      

  2.   

    你要更新的几条记录如下:
    id3=1 and id2=1 -> val=2
    id3=1 and id2=2 -> val=8
    id3=1 and id2=3 -> val=3
    id3=1 and id2=4 -> val=4
    可见id3都等于1,而id2在1~4,则可以根据id2值的不同来给val赋值update t set val=decode(id2,1,2,2,8,3,3,4,4,0) where id3=1 and id2 in(1,2,3,4);
      

  3.   

    sqlplus itellindb/sysdb@sysdb @/opt/oracle/tmp/xxx.sql
    试试自己写个文件xxx.sql 如下
    update table t set t.id1 = 2 where val=2;
    update table t set t.id1 = 2 where val=2;
    update table t set t.id1 = 2 where val=2;
    update table t set t.id1 = 2 where val=2;
    commit;
    这样批量执行sql语句