Oracle Reports Builder-检查查询是否为空

时间:2019-02-06 15:25:37

标签: sql oracle plsql report oraclereports

我正在使用Oracle Report Builder 11.1.2.2.0。 我的报表中定义的查询很少,当其中一个查询没有返回行时,我想执行一些pl / sql代码。

例如:

if (query returned no rows) then
    do_something();
end if;

如何检查?

2 个答案:

答案 0 :(得分:1)

据我所知,这是没有办法的-不是简单的方法。您将必须运行两次相同的查询:一次显示结果(如果有的话),另一次检查该查询是否返回了某些内容。

这当然会慢很多(执行相同的查询两次)。

一种解决方法可能是将数据准备到一个单独的表(请参阅是否可以使用全局临时表)仅一次,然后

  • 检查它是否包含任何行
  • 只需select * from that_table(没有任何条件,因为您已经在向其中插入数据时就已经这样做了)

或者,如果您感兴趣的查询简单快速,只需在PL / SQL过程中使用它即可。您必须在多个地方维护相同的代码。看看是否可以创建一个返回表的函数-这样可以简化事情。

答案 1 :(得分:1)

您可以尝试使用function将查询转换为exception handling,例如

create of replace function get_color( i_color_id color_palette.id%type ) 
                        return color_palette.fg_color%type is    
  o_color  color_palette.fg_color%type;
begin
  select fg_color
    into o_color
    from color_palette
   where id = i_color_id;
  return o_color;
 exception when no_data_found then return null;
end;

并执行下面的代码

if ( get_color(:id) is null ) then
    paint_it_to_black();
end if;