4

Я разрабатываю отчет в Sql Server Reporting Services 2005, подключившись к базе данных Oracle 11g. По мере того как вы публикуете ответы, возможно, это поможет узнать, что я владею MSSQL Server и неопытным в Oracle.Отчет SSRS от Oracle DB - использование хранимой процедуры

У меня есть несколько вложенных подписок и вам нужно использовать сводные данные во внешних отчетах и ​​одни и те же данные, но подробно во внутренних отчетах. Чтобы избавить сервер БД от нескольких исполнений, я подумал, что сначала запустил некоторые временные таблицы, а затем запросил их несколько раз в отчете и вложенных отчетах.

В SSRS наборы данных, очевидно, выполняются в том порядке, в котором они отображаются в файле RDL. И у вас может быть набор данных, который не возвращает набор строк. Поэтому я создал хранимую процедуру для заполнения четырех временных таблиц и сделал это первым набором данных в моем отчете. Этот SP работает, когда я запускаю его из SQLDeveloper, и я могу запросить данные из временных таблиц. Однако это, похоже, не сработало, потому что SSRS, по-видимому, не повторно использовал один и тот же сеанс, поэтому, хотя глобальные временные таблицы были созданы с помощью ON COMMIT PRESERVE ROWS, мои наборы данных были пустыми.

Я перешел на использование «реальных» таблиц, и теперь я передаю дополнительный параметр, GUID в форме строки, уникально сгенерированный при каждом новом исполнении, который является частью первичного ключа каждой таблицы, поэтому я могу вернуться просто строки для этого выполнения.

Запуск этого из Sql Developer отлично работает, например:

DECLARE 
ActivityCode varchar2(15) := '1208-0916  '; 
ExecutionID varchar2(32) := SYS_GUID(); 
BEGIN 
CIPProjectBudget (ActivityCode, ExecutionID); 
END; 

Никогда не забывайте, что в этом примере я не знаю, с GUID, это просто доказывает, что это работает, потому что строки вставляются в мои четыре таблицы.

Но в отчете SSRS я все еще не получаю никаких строк в своих наборах данных, и разработчик SQL подтверждает, что никакие строки не вставлены.

Так что я имею в виду вдоль линий:

  • Oracle использует неявные транзакции и мои изменения не получает совершено?
  • Несмотря на то, что я могу доказать, что SP, исполняемый не rowset, выполняется (потому что, если я не укажу на отображение параметров, он жалуется на время рендеринга отчета о том, что не имеет достаточных параметров), возможно, это не действительно. Каким-то образом.
  • Неверный порядок выполнения не является проблемой, или строки появятся в таблицах, а это не так.

Меня интересуют любые идеи о том, как это осуществить (особенно в том, что несколько раз не выполнялись основные запросы). Я перепроектирую весь свой отчет. Я перестану использовать хранимую процедуру. Предложите все, что угодно! Мне просто нужна помощь, чтобы эта работа работала, и я застрял.

Если вы хотите получить более подробную информацию, в моем отчете SSRS у меня есть объект List (это контейнер, который повторяется один раз для каждой строки в наборе данных), который имеет некоторые значения заголовков, а затем содержит подчиненный отчет. В конце концов, будет четыре общих отчета: один основной отчет с тремя вложенными вложенными отчетами. Каждый подчиненный отчет будет находиться в списке родительского отчета.

ответ

2

Вздох.

Столбец, выбранный в SP, имеет тип данных char, но SP имеет для него входной параметр varchar2. В Oracle переменные varchar2 фактически теряют свои конечные пробелы (в отличие от SQL Server).Кроме того, я делал RTrim() в параметре SSRS как запрошенный из базы данных.

Для тех, кто может захотеть узнать ... SP в Oracle не могут возвращать ряды. Поэтому, если вы используете SP из SSRS, это, вероятно, для заполнения таблиц. Но SSRS по умолчанию обычно выполняет запросы одновременно. Чтобы заставить его запускать запросы поочередно, отредактируйте набор данных, который запускает SP, нажмите кнопку «...» рядом с раскрывающимся списком «Источник данных» и установите флажок «Использовать одиночную транзакцию» внизу. Пока SP является первым набором данных, указанным в файле RDL, он должен запускаться первым, а остальные наборы данных ждут, пока они не закончатся. Примечание. Этот параметр применяется ко всем наборам данных с использованием одного и того же источника данных.

+0

вы должны поместить содержимое своего комментария в свой ответ, чтобы люди могли находить его более легко (и поэтому вы можете получить больше отзывов!). ;) –

+0

@ AJ: Спасибо! – ErikE

Смежные вопросы