基于Oracle查询或存储过程的Crystal Report运行极其缓慢

2020-09-20 23:12发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

在办公室,我们有针对Oracle 11gR2的Crystal Reports 2016。

事实证明,我创建了一个存储在" Package.Stored Procedure"中的查询,该查询利用了"虚拟视图"(例如:以" view1"作为SELECT ...)。 查询中大约有5或6个虚拟视图。 返回的行数不高。 通常在100到200之间。存储过程的光标为IN OUT参数。

存储过程在数据库中运行良好,并且返回数据不需要花费太长时间(最多1分钟或2分钟)。

我的问题是当我使用存储过程使用报表时。 该报告仅在第一次(我创建报告时)运行良好。 然后,当我尝试第二次执行它时,它会花费很多时间,实际上我还没有看到它返回任何数据。

我什至已经在报表中复制了查询(根本没有使用存储过程),并且得到的结果与使用存储过程时的结果相同。

我正在使用Crystal Reports中包含的Oracle本机驱动程序,因为当我尝试使用ODBC驱动程序时会引发I.O异常。

您能告诉我什么地方可能出问题吗? 谢谢

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

在办公室,我们有针对Oracle 11gR2的Crystal Reports 2016。

事实证明,我创建了一个存储在" Package.Stored Procedure"中的查询,该查询利用了"虚拟视图"(例如:以" view1"作为SELECT ...)。 查询中大约有5或6个虚拟视图。 返回的行数不高。 通常在100到200之间。存储过程的光标为IN OUT参数。

存储过程在数据库中运行良好,并且返回数据不需要花费太长时间(最多1分钟或2分钟)。

我的问题是当我使用存储过程使用报表时。 该报告仅在第一次(我创建报告时)运行良好。 然后,当我尝试第二次执行它时,它会花费很多时间,实际上我还没有看到它返回任何数据。

我什至已经在报表中复制了查询(根本没有使用存储过程),并且得到的结果与使用存储过程时的结果相同。

我正在使用Crystal Reports中包含的Oracle本机驱动程序,因为当我尝试使用ODBC驱动程序时会引发I.O异常。

您能告诉我什么地方可能出问题吗? 谢谢

付费偷看设置
发送
4条回答
jovirus
1楼 · 2020-09-21 00:05.采纳回答

我认为导致问题的原因是虚拟视图。 我知道Crystal Reports应用程序不喜欢存储过程中的Temp表,我猜想与Virtual Views相同。

要查找正在发生的情况,我建议使用CRLogger:

https://apps.support.sap.com/sap/support/knowledge/public/zh/1603398

CrLOgger捕获数据源和Crystal Reports之间的通信。 您可以收集第一次运行的日志,然后与第二次运行进行比较。 它应该告诉您对存储过程的CR调用是否有任何区别。

clever101
2楼-- · 2020-09-20 23:42

感谢帮助Vitaly

小c菟菟
3楼-- · 2020-09-21 00:02

很好,您使用的是本机Oracle连接-与ODBC与Oracle相比,它的响应速度和稳定性要高得多。

存储过程中使用的是"虚拟视图"还是在您的报告中将它们链接在一起?

您是将存储过程链接到报表中的其他内容,还是只使用一个存储过程?

存储的proc更新数据吗?

-戴尔

宇峰科技
4楼-- · 2020-09-20 23:53

嗨,戴尔,

感谢帮助。

虚拟视图在存储过程中使用,而不在报表中使用,并且存储过程未与其他任何链接。 我仅将其用作报告的数据源,并且由于当前仅对其进行测试,因此我仅在报告中添加了几个字段,然后执行它。 我只有3个参数。 其中2个是IN参数,它们是数字类型。 另一个参数是ref Cursor,它用于返回查询。

每次我进行测试时,当我在数据库中执行存储过程时,存储过程都可以正常运行。 在配置报告时,我设置了测试参数,并且在第一次刷新时运行良好,我看到了报告中的列。 即使我在报表中复制查询,它也只能在第一次运行时正常运行。

存储过程不会更新任何表,它仅在执行SELECT命令。

我已按照CR指南中的说明执行了所有步骤来使用Oracle存储过程(例如,处理日期时必须使用的日期格式)。

我想知道可能是什么原因。

一周热门 更多>