我看还是有人不太理解我的意思 我再解释一下吧一张表中存在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自动过滤掉了
没办法. 你要求的数据列数都不一样,一个sql没法给你这样的数据.
select * from tb where c1||c2||c3.... is null
你要是觉得写语句一个一个麻烦的话 那就用数据字典生成你的查询语句跟表和字段相关的 select 'SELECT '||wm_concat('nvl('||t.COLUMN_NAME||')')||'from TABLENAME' from dba_tab_columns t where t.TABLE_NAME='TABLENAME'
借助user_objects这个视图,通过拼接 形成你要的sql语句.然后在执行语句.
或者是同样的方式 用sql执行sql;
等晚上有时间来写写
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自动过滤掉了
你要求的数据列数都不一样,一个sql没法给你这样的数据.
where c1||c2||c3.... is null
select 'SELECT '||wm_concat('nvl('||t.COLUMN_NAME||')')||'from TABLENAME' from dba_tab_columns t where t.TABLE_NAME='TABLENAME'