Oracle DB的SSRS报告-使用存储过程

Eri*_*ikE 5 sql oracle stored-procedures subreport reporting-services

我正在Sql Server Reporting Services 2005中开发一个报表,并连接到Oracle 11g数据库。当您发表答复时,也许会有助于知道我精通MSSQL Server而对Oracle没有经验。

我有多个嵌套的子报表,需要在外部报表中使用摘要数据,而在内部报表中使用相同的数据,但需要使用详细数据。为了使DB服务器免于多次执行,我想在开始时填充一些临时表,然后在报表和子报表中多次查询它们。

在SSRS中,数据集显然按照它们在RDL文件中出现的顺序执行。而且,您可以拥有不返回行集的数据集。因此,我创建了一个存储过程来填充四个临时表,并将其作为报表中的第一个数据集。当我从SQLDeveloper运行该SP时,它可以工作,并且可以从临时表中查询数据。但是,由于SSRS显然没有重用同一会话,因此似乎无法解决问题,因此,即使使用ON COMMIT PRESERVE ROWS创建了全局临时表,我的数据集也为空。

我改用“真实”表,现在传入一个附加参数,即字符串形式的GUID,它在每个新执行中都是唯一生成的,它是每个表主键的一部分,因此我可以只获取这个执行。

从Sql Developer运行此程序效果很好,例如:

DECLARE
ActivityCode varchar2(15) := '1208-0916      ';
ExecutionID varchar2(32) := SYS_GUID();
BEGIN
CIPProjectBudget (ActivityCode, ExecutionID);
END;
Run Code Online (Sandbox Code Playgroud)

没关系,在此示例中,我不知道GUID,这只是证明了行之有效,因为在我的四个表中插入了行。

但是在SSRS报告中,我的数据集中仍然没有任何行,并且SQL Developer确认没有插入任何行。

所以我在考虑以下方面:

  • Oracle使用隐式事务,而我的更改没有落实吗?
  • 即使我可以证明非行返回的SP正在执行(因为如果我遗漏了参数映射,它也会在报表呈现时抱怨没有足够的参数),也许它并未真正执行。不知何故。
  • 错误的执行顺序不是问题,或者表中会出现行,而行中不会。

我对有关如何完成此操作的任何想法感兴趣(尤其是关于不多次运行主查询的部分)。我将重新设计整个报告。我将停止使用存储过程。建议任何你喜欢的!我只是需要帮助才能使它正常工作,所以我陷入了困境。

如果您想了解更多详细信息,请在我的SSRS报告中有一个List对象(它是对Dataset中的每一行重复一次的容器),该对象具有一些头值,然后包含一个子报表。最终,总共将有四个报告:一个主报告,三个嵌套子报告。每个子报表都将在父报表的列表中。

Eri*_*ikE 3

叹。

SP 中选择的列具有char数据类型,但 SP 具有varchar2其输入参数。在 Oracle 中,varchar2变量实际上会丢失其尾随空格(与 SQL Server 不同)。最重要的是,我正在对RTrim()从数据库查询的 SSRS 参数进行操作。

对于那些可能想知道的人... Oracle 中的 SP 无法返回行集。因此,如果您从 SSRS 运行 SP,它可能会填充表。但 SSRS 默认情况下通常会同时运行查询。要使其连续运行查询,以便后续查询可以正确依赖于较早查询的结果,请编辑运行 SP 的数据集,单击“数据源”下拉列表旁边的“...”按钮,然后选中底部的“使用单一交易”复选框。只要 SP 是 RDL 文件中列出的第一个数据集,它就应该首先运行,其他数据集将等待它运行完成。注意:此设置适用于使用相同数据源的所有数据集。