代码之家  ›  专栏  ›  技术社区  ›  Mutation Person

在SSRS中选择Oracle存储过程会导致visualstudio2005ide崩溃

  •  1
  • Mutation Person  · 技术社区  · 14 年前

    我有一个非常简单的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 Provider for Oracle 11g的共享数据源:

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

    (加上用户凭据)。

    什么工作正常:

    • 存储过程执行
    • “测试连接”在SSRS中运行良好
    • 查询字符串 SELECT * FROM MyTable; 命令类型为“文本”时,将在SSRS报告中生成正确的字段。

    失败之处:

    有人知道这件事吗?

    任何帮助都将不胜感激。谢谢。

    我已将提供程序从OracleOLEDB提供程序修改为.NETOracle提供程序,神奇的是,它工作正常。

    这似乎表明Oracle提供程序有问题。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Mutation Person    14 年前

    我们搞清楚了。

    在程序所在的环境中,我们有一个实质性的数据字典。两个提供者在查找信息时使用两个不同的查询。

    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
    

    可以找到更多信息 here