要写一个存储过程,对一个表进行更新操作.
比如有COL1,COL2,COL3,COL4等列,
要求第一步:把COL1不等null的记录,COL1全部更新成"1"
第二步:把COL2等于2的记录,COL1更新成"2",COL2更新成NULL
第三步:把COL3等于3的记录,COL1更新成"3",COL3更新成"0"
并且,每一步更新的记录,之后的步骤都不能再更新.请问,这样的SQL,有什么好的实现方式.不能将某一列作为FLAG列,也就是说每个步骤的更新字段,只能是业务要求的那些字段.
比如有COL1,COL2,COL3,COL4等列,
要求第一步:把COL1不等null的记录,COL1全部更新成"1"
第二步:把COL2等于2的记录,COL1更新成"2",COL2更新成NULL
第三步:把COL3等于3的记录,COL1更新成"3",COL3更新成"0"
并且,每一步更新的记录,之后的步骤都不能再更新.请问,这样的SQL,有什么好的实现方式.不能将某一列作为FLAG列,也就是说每个步骤的更新字段,只能是业务要求的那些字段.
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)
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
col1, col2, col3
2 2 3按照我的要求,应该更新成
1 2 3可是按照你给的程序,似乎有问题.
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 ;