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. Вам придется поддерживать один и тот же код в нескольких местах. Посмотрите, сможете ли вы создать функцию, которая возвращает таблицу, которая упростит вещи (вроде).

Другие вопросы по тегам