BIRT сообщает, передавая SQL в параметр запроса - PullRequest
1 голос
/ 27 июля 2011

В Crystal Reports вы можете передавать SQL напрямую в параметр отчета в виде строки, и SQL разрешается при запуске отчета.

Например, допустим, вы хотите запланировать запуск отчета в начале каждого месяца для данных, относящихся к предыдущему месяцу. Запрос для конкретного отчета может выглядеть следующим образом:

SELECT
  sum(jobid) jobs
FROM
  job
WHERE
  created_date >= {?StartDate}
  and created_date < {?EndDate}

Вместо установки параметров StartDate и EndDate в поля даты и необходимости обновлять параметры, отправляемые в отчет каждый месяц, вы можете установить параметры в строку и передать следующий SQL-код каждому параметру:

StartDate = add_months(trunc(sysdate, 'mm'), -1)
EndDate = trunc(sysdate, 'mm')

Таким образом, каждый раз, когда запускается запланированный отчет, он автоматически определяет правильный период времени, для которого нужно запустить. Это работает, потому что отчеты Crystal передают аргументы как литералы, а не как 'trunc (sysdate,' mm ')'.

Можно ли передать SQL в параметр отчета BIRT, как этот? Я использую плагин BIRT для Eclipse и продолжаю получать ошибки ORACLE, которые указывают на то, что BIRT передает параметры в запрос в виде строки SQL с одинарными кавычками.

1 Ответ

1 голос
/ 04 августа 2011

Я не думаю, что вы хотите сделать это (это возможно, но не рекомендуется). Вы открываете свой отчет до атак SQL-инъекций для одного. Так что я могу квалифицироваться как отвечающий на ваш вопрос, вы можете установить «this.query» на значение вашего параметра в событии открытия набора данных, если вы действительно хотите это сделать.

Что еще более важно, посмотрите в корень проблемы. Какой драйвер вы используете? В конечном итоге драйвер готовит и выполняет запрос для BIRT. Можете ли вы выполнить запрос вне BIRT, используя тот же драйвер успешно? Другое место, чтобы посмотреть на это параметр, установленный в отчете. Параметр строго типизирован? Он должен быть строго напечатан, чтобы гарантировать, что он может быть правильно вставлен в текст запроса, когда он вставлен в «?» заполнитель у вас есть в вашем корневом запросе.

Удачи!

...