0

我有几份报告,每一份报告都包含几张表格。

假设 3 个表,tableA,tableB 和 tableC。我想使用以下 Oracle 函数来过滤还传递报告参数的结果集:

AND function(tableB.field1, tableB.field2, tableB.field3, {?report_parameter}) = 'S'

需要注意的事实:

  • Oracle 函数只能用于 Crystal Reports 中的 SQL 表达式和/或 SQL 命令。
  • SQL 表达式不能包含报告参数(因此,不是一个选项)。
  • Crystal Reports 允许您将报表表替换为 SQL 命令,但不允许您将多个表替换为单个 SQL 命令。
  • 我们不想重新构建所有报告。
  • 我们不想将单个表替换为 SQL 命令,因为它会在较高级别影响性能,因为 Crystal 在执行报表时不会在单个查询上转换表和 SQL 命令。
  • 此 Oracle 函数从其他表中选择数据,因此不能在报表自定义函数上重写。
  • {?report_parameter} 是只有应用程序知道的信息。它在将报告导出给用户之前由应用程序填写。

我能做些什么来解决这个问题?

4

1 回答 1

0

不知道为什么你的函数需要表和参数,我只能给你模糊的、未经测试的选项。没有一个选项是理想的:

  • 将您的 Oracle 函数重写为“自定义函数”(CF);在记录选择公式中参考 CF;过滤器将被应用 WhileReadingRecords(即函数不会发送到数据库)
  • 将您的函数重写为接受一个参数但返回一个记录集的存储过程(该参数将被 Crystal Reports 识别);将其他表加入存储过程。存储过程需要以支持 Crystal Reports 数据需求的方式编写(使用带有参数的存储过程的结果作为仪表图的值 - asp.net 应用程序中的水晶报表
于 2012-10-09T12:44:39.073 回答