Выбор хранимой процедуры Oracle в SSRS завершает работу Visual Studio 2005 IDE - PullRequest
1 голос
/ 01 ноября 2010

Условия задачи

У меня есть очень простая хранимая процедура Oracle (11g), которая объявлена ​​так:

CREATE OR REPLACE PROCEDURE pr_myproc(L_CURSOR out SYS_REFCURSOR)
is
   BEGIN
     OPEN L_CURSOR FOR
       SELECT * FROM MyTable;
   END;

Это компилируется правильно.Курсор содержит col1, col2 и col3.

В SSRS у меня есть общий источник данных, который использует поставщик Oracle OLEDB для Oracle 11g:

Provider=OraOLEDB.Oracle.1;Data Source=LIFEDEV

(плюс учетные данные пользователя).

Что работает ОК:

  • Хранимая процедура выполняется правильно в PL / SQL Developer
  • «Тестовое соединение» в SSRS отлично работает в SSRS
  • Строка запроса SELECT * FROM MyTable; с типом команды 'text' создает правильные поля в отчете SSRS.
  • .NET Oracle Provider вместо Oracle OLE DB Provider

Что не работает:

Если я изменю тип команды на «Хранимая процедура» и ввожу «pr_myproc», когда я нажимаю «ОК» Visual Studio 2005 (пакет обновления 2)просто зависает / падает.

У кого-нибудь есть знания / опыт?

Любая помощь будет наиболее ценной.Спасибо.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Я изменил провайдера от провайдера Oracle OLE DB на провайдера .NET Oracle, и, как ни странно, он работает.

Это может указывать на проблему с поставщиком Oracle.

Есть еще мысли?

1 Ответ

1 голос
/ 03 ноября 2010

Мы подошли ко всему этому.

В среде, где находилась процедура, у нас есть существенный словарь данных. Два провайдера при поиске информации используют два разных запроса.

Вот тот, который использовался провайдером Oracle, который занимает более 10 минут:

select * from (select null  PROCEDURE_CATALOG
                      , owner PROCEDURE_SCHEMA
                      , object_name PROCEDURE_NAME
                      , decode (object_type, 'PROCEDURE', 2, 'FUNCTION',  3, 1) PROCEDURE_TYPE
                      , null PROCEDURE_DEFINITION
                      , null DESCRIPTION
                      , created DATE_CREATED
                      , last_ddl_time DATE_MODIFIED 
              from all_objects where object_type in ('PROCEDURE','FUNCTION') 
              union all 
              select null PROCEDURE_CATALOG
                          , arg.owner PROCEDURE_SCHEMA
                          , arg.package_name||'.'||arg.object_name PROCEDURE_NAME
                          , decode(min(arg.position), 0, 3, 2) PROCEDURE_TYPE
                          , null PROCEDURE_DEFINITION
                          , decode(arg.overload, '', '', 'OVERLOAD') DESCRIPTION
                          , min(obj.created) DATE_CREATED
                          , max(obj.last_ddl_time) DATE_MODIFIED 
              from all_objects obj, all_arguments arg 
              where arg.package_name is not null 
              and   arg.owner = obj.owner 
              and   arg.object_id = obj.object_id 
              group by arg.owner, arg.package_name, arg.object_name, arg.overload ) PROCEDURES  
WHERE PROCEDURE_NAME = '[MY_PROCEDURE_NAME]' order by 2, 3

Более подробную информацию можно найти здесь

...