Oracle Reports Builder - проверка, если запрос пуст
Я использую Oracle Report Builder 11.1.2.2.0. У меня есть несколько запросов, определенных в моем отчете, и я хочу выполнить некоторый код pl/sql, когда по одному из моих запросов не возвращены строки.
Так, например:
if (query returned no rows) then
do_something();
end if;
Как я могу это проверить?
2 ответа
Вы можете попытаться преобразовать ваш запрос в 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;
Насколько я могу судить, сделать это невозможно - не так просто. Вам нужно будет выполнить один и тот же запрос дважды: один раз, чтобы отобразить результат (если есть), и другой раз, чтобы проверить, что этот запрос возвратил что-то или нет.
Это означает, что это будет намного медленнее, конечно (выполнение одного и того же запроса дважды).
Обходной путь может подготовить данные в отдельную таблицу (посмотрите, можете ли вы использовать глобальную временную таблицу) только один раз, а затем
- проверьте, содержит ли он какие-либо строки или нет
- просто
select * from that_table
(без каких-либо условий, поскольку вы уже сделали это, когда вставили в него данные)
Или, если интересующий вас запрос прост и быстр, просто используйте его в своей процедуре PL/SQL. Вам придется поддерживать один и тот же код в нескольких местах. Посмотрите, сможете ли вы создать функцию, которая возвращает таблицу, которая упростит вещи (вроде).