Crystal Reports不使用Oracle驱动程序从某些Oracle视图返回数据

时间:2016-05-04 21:52:45

标签: oracle crystal-reports

我正在使用Crystal Reports 2013并安装了Oracle ODAC 32和64位版本。如果我创建一个新报告并使用“Oracle Server”数据源,我可以从我有权访问的任何表中进行选择。但是,我发现我没有从某些视图中检索数据,而不是所有视图。

查询在SQL Plus或SQL Developer中正常工作。查询使用过时的驱动程序(如OLE DB和ODBC)检索Crystal Reports中的数据。

我找不到有效或无效的观点之间的共性。我测试过的所有视图都属于同一个模式。它们都涉及属于第三个模式的表 - 也就是说,我以USER1身份登录,从属于USER2的视图中查询,该视图从属于USER2和USER3的表中提取数据。为了在表上创建视图并使该视图对其他人可用,Oracle需要SELECT WITH GRANT OPTION权限,该权限已就绪。同样,查询在其他SQL工具中也能正常工作。

更新:我已尝试以视图所有者身份登录,但无法查询它们。我已经尝试查询基础表作为视图所有者(user2)和Crystal Reports所有者(user1)。两个用户都能够查询基础表。视图本身似乎是个问题。

我正在研究有效的观点与不起作用的观点之间的差异。当我发现不起作用的视图都使用引用列位置的ORDER BY子句(例如:ORDER BY 2,1)时,我很乐观。我尝试重写ORDER BY以使用列名。没工作。尝试删除ORDER BY子句。没工作。回到绘图板。

1 个答案:

答案 0 :(得分:1)

我发现问题是Oracle视图使用的是特定于Oracle的非标准SQL。除了上面提到的ORDER BY 2, 1之外,WHERE clause还有一个隐含的日期转换,例如

WHERE date_col = '01-JAN-2016'

当我添加TO_DATE功能时:

WHERE date_col = TO_DATE ('01-JAN-2016', 'dd-MON-yyyy')

Crystal Report 能够查询视图。