4

Я использую SSRS (2k5) для отчета по данным оракула. Цель отчета - обработать около 100 проверок (когда они завершены) на данных, чтобы убедиться, что они были введены правильно (и наше программное обеспечение действует так, как это предполагается). Чтобы достичь этого, я создал пакет и конвейерную функцию, в которой выполнялся оператор WITH. Ориентировочно пакет, собираемый в Oracle выглядит следующим образом:Oracle с предложением, вызывающим проблему в SSRS?

WITH A as (select stuff from X), B as (select stuff from Y join X), C as (select stuff from Z join X)
Subquery1
Union
Subquery2
Union
...
Subquery100

Я называю эту функцию пакета непосредственно от SSRS, используя таблицу() , Все работает отлично на некоторое время. Однако, если я запускаю его в тот же день я получаю сообщение об ошибке:

ORA-32036: неподдерживаемый случай для встраивания имени запроса с использованием clauseORA-6512: на «[название функции]»

Однако, если я открою Oracle SQLDeveloper и запустим функцию, вернитесь к SSRS, все работает нормально (на некоторое время).

Я понимаю, что это, вероятно, злится на мои вложенные предложения WITH, но что может заставить его работать некоторое время, а затем не скоро после? Обратите внимание, что он всегда работает в SQLDeveloper.

Заранее благодарю вас за помощь!

+0

Есть ли какие-либо вызовы функций в 'SELECT'' в предложениях' WITH'? – Ollie

+0

Извините за поздний ответ. Да есть функции, называемые «select from Dual». – Paul

ответ

1

Возможно, Джеффу подразумевал это раньше, однако я получить эту работу, что содержит запрос оракула с помощью OPENQUERY().
Любопытно, хотя мне все равно придется запускать запрос один раз после того, как все изменения для него будут работать, но мне больше не нужно запускать его, прежде чем мне нужно будет запустить отчет. Еще раз спасибо за вашу помощь!

4

Ваша проблема заключается в том, что версия клиента (или, возможно, драйвера внутри вашего клиента), который вы подключаете к Oracle с (внутри SSRS), вероятно, не поддерживает вызовы функций в предложении WITH.

В клиенте 9i предложение WITH не было полностью функциональным, и я подозреваю, что любой клиент подключается к Oracle (даже если он не является клиентом 9i) по-прежнему не полностью работоспособен.

Вы должны либо:

1) Обновление клиента Oracle (или драйвер) в пределах SSRS (если это вообще возможно)
2) Обновите версию SSRS (если это не последняя, ​​но проверьте, стоит ли делать обновление в первую очередь)
3) Перезапишите запрос без предложений WITH и вместо этого используйте встроенные представления.

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

Надеется, что это помогает ...

+0

+1 за то, что я собирался напечатать :) также 4) напишите пакет и попросите его SSRS. – SQLMason

+0

Или 5) Оберните свой запрос в один большой 'SELECT * FROM (ваш запрос)' – Jeff

+0

@Jeff, будет ли это работать, даже если их клиент или драйвер не поддерживает предложение WITH WITH с функциями? Я бы подумал, что это все равно даст им ошибку? – Ollie

3

У меня была такая же проблема и решить эту проблему путем добавления функции pragma autonomous_transaction; к функции..e.g:

create or replace function myfunction() return varchar2 is pragma autonomous_transaction; 
begin 
--Your code here 
commit;---> don't forget the commit or else won't work 
return 'result' 
end; 

Просто используйте его, если ваша функция не управляет данными.

+0

Жаль, что я наткнулся на это 8 часов назад. Спасибо, что спасли мой бекон! – Baodad

0

Я использовал другой инструмент BI, но получил ту же ошибку. Нашел хорошее решение, которое сработало для меня, добавив DistribTx = 0 в строку подключения. Заслуга Шон прокомментировал этот пост https://orastory.wordpress.com/2007/09/20/one-of-those-weird-ones-ora-32036/#comment-9164

вопрос до сих пор не фиксируется Oracle 11g от r2

0

В SSRS, я подключен непосредственно к базе данных Oracle 10g, используя драйвер Oracle. Я обнаружил, что этот драйвер имеет следующие ограничения:

  1. Один WITH подзапроса не может ссылаться более чем один раз в запросе, даже если SQL Developer позволяет «обмануть» и уйти с этим.

  2. Я получаю ошибку ORA-32036, если я пытаюсь выполнить запрос в SSRS с более чем дваWITH подзапросов, т.е. WITH A AS (...), B AS (...) SELECT ... FROM A, B ..., даже если в SQL Developer я могу использовать столько WITH с, как мне нравится.

Так еще одно предложения, чтобы попытаться переписать запрос, чтобы использовать не более двух WITH подзапросов.

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