Выбор хранимой процедуры Oracle в SSRS завершает работу Visual Studio 2005 IDE

Условия проблемы

У меня есть очень простая 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
  • Строка запроса SELECT * FROM MyTable; с типом команды 'text' создает правильные поля в отчете SSRS.
  • .NET Oracle Provider вместо Oracle OLEDB Provider

Что терпит неудачу:

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

Кто-нибудь имеет какие-либо знания / опыт в этом?

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

ДАЛЬНЕЙШАЯ ИНФОРМАЦИЯ

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

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

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

1 ответ

Решение

Мы дошли до сути этого.

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

Вот тот, который использовал поставщик 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

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

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