要写一个存储过程,对一个表进行更新操作.
比如有COL1,COL2,COL3,COL4等列,
要求第一步:把COL1不等null的记录,COL1全部更新成"1"
第二步:把COL2等于2的记录,COL1更新成"2",COL2更新成NULL
第三步:把COL3等于3的记录,COL1更新成"3",COL3更新成"0"
并且,每一步更新的记录,之后的步骤都不能再更新.请问,这样的SQL,有什么好的实现方式.不能将某一列作为FLAG列,也就是说每个步骤的更新字段,只能是业务要求的那些字段.

解决方案 »

  1.   

    update test
    set 
    col1=docode(col3,'3','3',decode(col2,'2','2',decode(col1,null,col1,'1'))),
    col2=decode(col2,'2',null,col2),
    col3=decode(col3,'3','0',col3)
      

  2.   

    update test
    set 
    col1=docode(col3,'3','3',decode(col2,'2','2','1')),
    col2=decode(col2,'2',null,col2),
    col3=decode(col3,'3','0',col3)
    where col1 is not null
      

  3.   

    xluzhong(Ralph) :如果是如下数据
    col1, col2, col3
    2     2     3按照我的要求,应该更新成
    1     2     3可是按照你给的程序,似乎有问题.
      

  4.   

    update test_10
    set col1 = decode(col1, null,decode(col2,'2',2,decode(col3,'3',3,col1)),'1'),
    col2 = decode(col1, null,decode(col2,'2',null,col2),col2),
    col3 = decode(col1,null,decode(col2,'2',col3,decode(col3,'3',null,col3)),col3);
    commit ;