比如有表tb 表内容是 1 2 3 4 5 (NULL) (NULL) (NULL) ...... (一条记录)我用select * from tb 取过来的值就把这些空值(NULL)也取过来了 我想要自动舍弃空值 比如例子中就取到 1 2 3 4 5 这里结束 sql语句要怎么写?我尝试使用is null判断,但是这张表后面的空字段太多了,有30几个,一个个去写sql也太夸张了,有没有简单的实现方法? 

解决方案 »

  1.   

    不明白你的意思,是不是可以用nvl()?
      

  2.   

    你是想取表中所有字段都不为空的数据吗?如果是那样的话 你可以用函数
    借助user_objects这个视图,通过拼接 形成你要的sql语句.然后在执行语句.
    或者是同样的方式 用sql执行sql;
    等晚上有时间来写写
      

  3.   

    我看还是有人不太理解我的意思 我再解释一下吧一张表中存在N条记录 这个表数据有个特点就是每行记录只有前面几列有数据后面的列都是空(NULL),如果我用sql的select *出来的结果肯定包含了这些NULL结果,我想要的效果是通过写sql去掉空数据,oracle返回的结果就是非空值比如有2行数据
    1 2 3 4 5 后面全NULL
    a b c d e f g 后面全NULL
    我取到的结果就是
    1 2 3 4 5
    a b c d e f g
    这样 把NULL自动过滤掉了
      

  4.   

    没办法.
    你要求的数据列数都不一样,一个sql没法给你这样的数据.
      

  5.   

    select * from tb
    where c1||c2||c3.... is null 
      

  6.   

    你要是觉得写语句一个一个麻烦的话 那就用数据字典生成你的查询语句跟表和字段相关的 
    select 'SELECT  '||wm_concat('nvl('||t.COLUMN_NAME||')')||'from TABLENAME' from dba_tab_columns t where t.TABLE_NAME='TABLENAME'
      

  7.   

    为空字段不固定的话,老老实实用nvl吧
      

  8.   

    写段程序,nvl一下,到null就退出呗