Oracle Reports Builder - 检查查询是否为空
Oracle Reports Builder - checking if query is empty
我正在使用 Oracle Report Builder 11.1.2.2.0。
我的报告中定义的查询很少,我想在我的查询之一没有返回任何行时执行一些 pl/sql 代码。
例如:
if (query returned no rows) then
do_something();
end if;
如何查看?
据我所知,没有办法做到这一点 - 不能以简单的方式做到这一点。您必须 运行 两次相同的查询:一次显示结果(如果有),另一次检查该查询是否返回了某些内容。
这意味着它会慢很多,当然(执行相同的查询两次)。
解决方法可能是 准备 数据到一个单独的 table(看看你是否可以使用全局临时 table)一次,然后
- 检查它是否包含任何行
- 只是
select * from that_table
(没有任何条件,因为您在向其中插入数据时已经这样做了)
或者,如果您感兴趣的查询既简单又快速,只需在您的 PL/SQL 过程中使用它。您必须在多个地方维护相同的代码。看看你是否可以创建一个 returns 和 table 的函数 - 这会简化事情(某种程度上)。
您可以尝试将查询转换为 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;
我正在使用 Oracle Report Builder 11.1.2.2.0。 我的报告中定义的查询很少,我想在我的查询之一没有返回任何行时执行一些 pl/sql 代码。
例如:
if (query returned no rows) then
do_something();
end if;
如何查看?
据我所知,没有办法做到这一点 - 不能以简单的方式做到这一点。您必须 运行 两次相同的查询:一次显示结果(如果有),另一次检查该查询是否返回了某些内容。
这意味着它会慢很多,当然(执行相同的查询两次)。
解决方法可能是 准备 数据到一个单独的 table(看看你是否可以使用全局临时 table)一次,然后
- 检查它是否包含任何行
- 只是
select * from that_table
(没有任何条件,因为您在向其中插入数据时已经这样做了)
或者,如果您感兴趣的查询既简单又快速,只需在您的 PL/SQL 过程中使用它。您必须在多个地方维护相同的代码。看看你是否可以创建一个 returns 和 table 的函数 - 这会简化事情(某种程度上)。
您可以尝试将查询转换为 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;