日期:2014-05-17  浏览次数:20938 次

寻找nvl置0的替代方法
有表  
a                           b                       c
 
1                           2                      
5                           5                       2  
                            2                       1
1                                                   4

想把空值全部设置为0,oracle中nvl函数可以实现,但是一个字段一个字段进行,我若有很多字段就显得很不方便,高手有什么方法,批量实现吗?

------解决方案--------------------
decode
------解决方案--------------------
decode
------解决方案--------------------
必须一个个字段进行,
update xxx set a=nvl(a,0), b=nvl(b,0), c=nvl(c,0)
------解决方案--------------------
前两个人根本就没理解提问人的意思。
这个可以用过程实现,但执行效率是很低的,该写的就写吧。
假设表名叫table1
sqlstr:= 'select column_name from user_table_columns where table_name= ' 'table1 ' ' ';
open col_cur for sqlstr;
loop
fetch col_cur into v_colname;
exit when col_cur%notfound;
sqlstr:= 'update table1 set '||v_colname|| '=nvl( '||v_colname|| ',0) where ... ';
execute immediate sqlstr;
end loop
close col_cur;