为什么需要将数据从Oracle提取到Crystal Reports中



如果我从我的Oracle DB中运行以下选择,我会返回预期结果:

select * from risk t where t.accounting_to_date='01-JAN-3000'

当我在 Crystal Reports 2016 中运行相同的选择语句时,使用命令和 oracle 连接时,我无法提取任何数据。

我发现的解决方法是:

  1. 在我的Crystal Report命令中使用TO_DATE函数:

    select * from risk t where t.accounting_to_date= to_date('01-JAN-3000','dd-MON-yyyy')

  1. 使用ODBC连接。

这两个解决方法都可以工作。但是,我的问题是:是什么原因造成了这个问题?我可以更改某个地方的设置吗?在甲骨文侧还是水晶报告方面的问题?这是一个错误吗?

我只是想围绕为什么会发生这种情况。我必须使用Oracle连接,而不是ODBC,这样我就不可能解决解决方法。在oracle或Crystal中使用to_date围绕每个人的日期是压倒性的。我不得不将此功能添加到数十个日期中,还有数百个。

当我们更改将Crystal报告从使用ODBC连接到Oracle连接的方式时,我偶然发现了这一点。我发现了很多丢失的数据,并通过使用to_date函数进行了纠正。

预先感谢您。

varchar2默认铸造到日期仅适用于'01 -Jan-2017',因为Oracle NLS_DATE_FORMAT配置了该默认格式。每个会话可以更改默认格式,这可能是Crystal Reports每次建立连接时都可以做的。

如果您运行了这个,则会看到默认值是什么:

SELECT value
FROM   nls_session_parameters
WHERE  parameter = 'NLS_DATE_FORMAT'

如果您以某种方式将查询添加到报告中,则可能可以看到Crystal Reports设置的格式。

您可能永远不应该依靠默认格式来始终工作。DBA如果他选择的话可以更改该格式,并且所有依赖它的代码都会破坏。

在使用Crystal中使用Oracle ODBC驱动程序时,我们遇到了相同的问题,并且当我们移动到" CR Oracle Wire协议ODBC驱动程序"时已修复。由于您需要使用Oracle连接,因此我不确定您要做什么。这是我们从SAP中发现的:

来自SAP

的信息

最新更新