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

解决方案 »

  1.   

    能否详细点呢,我找了下decode似乎和我要求的功能有出入吧?
      

  2.   

    必须一个个字段进行,
    update xxx set a=nvl(a,0), b=nvl(b,0), c=nvl(c,0)
      

  3.   

    前两个人根本就没理解提问人的意思。
    这个可以用过程实现,但执行效率是很低的,该写的就写吧。
    假设表名叫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;