Oracle Reports Builder - проверка, если запрос пуст - PullRequest
0 голосов
/ 06 февраля 2019

Я использую Oracle Report Builder 11.1.2.2.0.У меня есть несколько запросов, определенных в моем отчете, и я хочу выполнить некоторый код pl / sql, если по одному из моих запросов не возвращено ни одной строки.

Так, например:

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

Какможно это проверить?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Вы можете попытаться преобразовать свой запрос в 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;
0 голосов
/ 06 февраля 2019

Насколько я могу судить, сделать это невозможно - не так просто.Вам придется выполнить один и тот же запрос дважды: один раз, чтобы отобразить результат (если есть), и еще раз, чтобы проверить, что этот запрос что-то возвратил или нет.

Это означает, что он будет намного медленнее,конечно (выполнение одного и того же запроса дважды).

Обходным путем может быть подготовка данных в отдельную таблицу (посмотрите, можете ли вы использовать глобальную временную таблицу) только один раз, а затем

  • проверьте, содержит ли он какие-либо строки или нет
  • просто select * from that_table (без каких-либо условий, поскольку вы уже сделали это, когда вставили в него данные)

Или, если интересующий вас запрос является простым и быстрым, просто используйте его в своей процедуре PL / SQL.Вам придется поддерживать один и тот же код в нескольких местах.Посмотрите, сможете ли вы создать функцию, которая возвращает таблицу, которая упростит вещи (вроде).

...