在Microsoft SQL Server中这样一个设置:
set fmtonly on|off
它是用来只将元数据返回给客户端,当 SET FMTONLY 为 ON 时,将不对行进行处理,也不将行作为请求的结果发送到客户端。
比如:
如果不设置set fmtonly的值,以下语句
select * from sysobjects
会返回非常多条记录,

set fmtonly on
select * from sysobjects
set fmtonly off
只返回一个记录条数为0的查询空记录.其实我的问题就是想问,在oracle中是否可以不真正执行查询而返回没有数据的空记录(我需要的只是有些查询结果的字段信息,以空记录返回),即只解析不运行.我解析的查询是复杂的、不定的,不要试图通过加什么 where 1 =2 或 where rownum<0实现,因为对于这个查询语句你很难正确解析它的最终where是否存在或是在什么位置,可能你能找到的是这个查询中的一个子查询,那么就错了;或通过加select * from (复杂查询) where rownum < 0的方法实现,因为这样也会出错,复杂查询可能包含order by 或其它的统计表达,这样就会出错。我们的宗旨是不破坏复杂查询原型。不知道oracle中是否可以做到?

解决方案 »

  1.   

    如果用ROW_NUMBER()OVER(PARTITION BY ... ORDER BY ...)可以去符合你的ORDER BY
      

  2.   

    楼主:请解释以下
    select * from (复杂查询) where rownum < 0
    也会出错的原因;
    如果这样也出错,我是无语了,
      

  3.   

    to andzen:
    oracle8i中如果复杂查询中有 group by是会报错的^_^
    oracle8i不允许子查询中有group by语法
      

  4.   

    create view abc as 复杂查询desc 复杂查询
      

  5.   

    create view abc as 复杂查询desc abc