背景-有一个应用程序构建使用水晶11。rpt文件本身非常简单:基于一个甲骨文数据库视图,其中包括两个blob列(一个持有一张照片,另一个,一个签名的图像)。在此之前,我们还有一个旧版本的这个应用程序,使用的是水晶8,据我所知,*.rpt文件是在什么时候转换的,没有做什么特别的事情。它仍然使用同一个oracle数据库视图。
我使用v$sql的DBA注意到,当我们运行报表时,它现在对数据库视图进行了三次查询。在此之前,它只发送了一个查询。这两个额外的查询是对第一个视图执行的,但是没有放置位置,并且只查找那些单独的blob列。
这不是我们使用水晶8时的表现,他证实了这一点。
水晶8只查询视图一次,并获取它所需的所有列。
水晶11也发送同样的查询,它本身也包括blob列。
水晶11不需要发送这两个额外的查询。
没有在水晶11 rpt文件中添加公式。该rpt文件的第8和第11版本都只有记录级别选择公式。我在设计布局中搜索了每一个blob对象,以确认它们是从相同的视图中获取的,等等。
进一步地,我做了以下工作:*我去掉了设计布局中的所有数据库对象。*我向后添加了两个文本列(没有使用blob列)* DBA确认只发生了对视图的一个查询。
怎么回事!?
为什么水晶8不这样做?这是一个已知的错误吗?一个人如何绕过它而不必重新设计整个报告呢?
其他信息:我验证了rpt文件只引用一个数据库视图。
我证实只有一个公式。这只存在于记录选择级别。它不包含对照片斑点的引用。
然而,我确实发现了一件有趣的事情,那就是公式编辑器中的“report”列表中,我看到了报表设计器/公式中使用的所有字段,除了照片和签名之外,它们都没有列出。这让我相信水晶是分开处理的。
没有使用任何子报告。
发布于 2015-03-25 18:22:28
我还没弄明白。但是,我正在探索如何从数据库专家创建一个SQL命令,该命令专门查询blob列,并有一个正确的where子句。这将成为我使用的blob字段,而不是视图本身。在使用where子句之前,DBA确实看到了使用where子句的附加查询,但在第二个查询没有显示where子句之前,DBA仍然遇到了一些错误。报告也运行得更快。只是需要弄清楚如何让它的其余部分发挥作用(另一个故事的另一个时间)。
https://stackoverflow.com/questions/29219101
复制相似问题