You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSRS调用Oracle 19c函数报错求助:原Oracle 12c环境运行正常

问题描述

将SSRS报表数据源从Oracle 12c迁移至19c后,调用返回REF CURSOR的Oracle函数时出现执行错误。旧环境(Oracle 12c + SSRS报表生成器v12)中,只需将数据集「查询类型」设为「存储过程」,直接输入带参数的函数名称即可正常运行;但新环境(Oracle 19c + SSRS报表生成器v15 + Oracle OLEDB客户端)执行时抛出以下错误:

报表处理期间出错。(rsProcessingAborted)
数据集‘region’的查询执行失败。(rsErrorExecutingCommand)
ORA-06550: line1, column 7: PLS-00221: '<>' 不是过程或未定义 ORA-06550:line1, column7: PL/SQL: statement ignored.

补充细节:

  • 新环境下将数据源设为SQL查询时,数据集可正常工作
  • 尝试调用简单测试函数GET_FUNC_TEST,仍出现相同错误
解决方案

针对SSRS调用Oracle 19c返回REF CURSOR的函数,需调整数据集配置方式,具体操作如下:

  • 切换查询类型为「文本」
    新版本SSRS与Oracle 19c的OLEDB驱动兼容逻辑发生变化,不再支持通过「存储过程」类型直接调用函数,必须切换为「文本」类型,通过PL/SQL块显式调用并返回游标。

  • 编写PL/SQL调用语句
    假设目标函数为GET_REGION(p_param IN VARCHAR2) RETURN SYS_REFCURSOR,在数据集的查询文本中输入如下代码:

    DECLARE
        v_cur SYS_REFCURSOR;
    BEGIN
        v_cur := GET_REGION(?); -- 问号对应SSRS参数,按顺序匹配
        DBMS_SQL.RETURN_RESULT(v_cur);
    END;
    

    若上述写法不生效,可尝试另一种兼容格式:

    BEGIN
        :out_cur := GET_REGION(?);
    END;
    

    使用第二种写法时,需在数据集的「参数」设置中添加一个输出参数:参数名称设为out_cur,数据类型选「游标」,方向设为「输出」。

  • 匹配Oracle客户端版本
    确保新环境使用的Oracle OLEDB客户端版本与Oracle 19c数据库版本一致,避免因版本不匹配导致的调用逻辑异常。

  • 验证函数权限与可用性
    确认SSRS使用的数据库账号对目标函数拥有EXECUTE权限,同时在Oracle 19c环境中直接调用函数(如通过PL/SQL Developer),验证函数本身可正常返回游标。

内容的提问来源于stack exchange,提问作者KS_23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 18:05:29