Sql server SQL Server Reporting Services中的Oracle日期格式异常
早些时候,我的客户使用SSRS2008R2和Oracle作为事务数据库。最近,他们已升级到SSRS 2017,现在许多报告抛出以下错误: 错误:投掷 Microsoft.ReportingServices.ReportProcessing.ProcessingAbortedException: [异常终止:报告处理], Microsoft.ReportingServices.ReportProcessing.ProcessingAbortedException: 报表处理过程中发生错误。--> Microsoft.ReportingServices.ReportProcessing.ReportProcessingException: 数据集“Ds_Main”的查询执行失败。--> Oracle.ManagedDataAccess.Client.OracleException:ORA-01830:日期 格式图片在转换整个输入字符串之前结束 仔细研究了报表查询之后,我注意到此错误适用于所有使用oracle函数Sql server SQL Server Reporting Services中的Oracle日期格式异常,sql-server,oracle,reporting-services,ssrs-2008-r2,ssrs-2017,Sql Server,Oracle,Reporting Services,Ssrs 2008 R2,Ssrs 2017,早些时候,我的客户使用SSRS2008R2和Oracle作为事务数据库。最近,他们已升级到SSRS 2017,现在许多报告抛出以下错误: 错误:投掷 Microsoft.ReportingServices.ReportProcessing.ProcessingAbortedException: [异常终止:报告处理], Microsoft.ReportingServices.ReportProcessing.ProcessingAbortedException: 报表处理过程中发生错误。-->
TO_DATE()
但没有使用日期格式的报表。例如:
To_date(:Date_Parameter) -> this syntax throws above mentioned error
To_Date(:Date_Parameter,’MM/DD/YYYY’) -> this syntax works perfectly
我愿意知道:
to_date()
函数的日期格式有关
根据官方文件:
原因:您试图输入日期值,但输入的日期与日期格式不匹配
在Oracle中,默认日期格式通常为DD-MON-YYYY。如果尝试输入不符合此格式的日期值
您似乎以dd-MMM-yyyy
格式传递了日期参数,现在它们以MM/dd/yyyy
的形式传递
首先,检查区域设置或应用程序区域性信息是否没有更改
可能的解决办法 您可以使用以下几种方法解决此问题: (1)处理参数日期格式 如果不想编辑所有代码,则更容易强制参数数据字符串格式,请确保传递到
to_DATE()
函数的所有参数均采用以下格式(或尝试从操作系统区域设置更改默认日期格式):
dd-MMM-yyyy example: 01-AUG-2019
(2)将日期格式添加到日期函数中
如果您确定日期参数格式是固定的且不会更改,则可以按照问题中所述编辑代码:
To_Date(:Date_Parameter,’MM/DD/YYYY’)
(3)将日期和格式作为参数传递
这也需要更改代码,但您需要将日期和格式作为参数传递
To_Date(:Date_Parameter,:DateFormat_Parameter)
更新1-在多个报告中进行通用更改 在搜索时,我发现以下链接提供了一种方法来循环报告并进行更改。您只需将
to_Date(:Date_参数)
替换为to_Date(:Date_参数,'MM/DD/YYYY')
:
更新2-其他可能的解决办法 通过编辑ReportViewer.aspx强制提供区域性信息 您可以编辑位于SQL Server reporting services目录中的
ReportViewer.aspx
文件,并强制在报表中使用区域性信息。查看以下问题,它将为您提供更多详细信息:
更新3-问题原因 除了发布的内容之外,我还发现了SQL Server 2008 R2文档:
select parameter, value
from nls_session_parameters
where parameter like 'NLS%'
order by parameter
不幸的是,在Oracle.ManagedDataAccess中似乎没有全局更改客户端日期格式的方法,因此您必须在报表数据集查询中进行所有更改
或者,您可以尝试确保传递的是日期参数,而不是字符串参数。如果将日期传递给Oracle的to_date()函数,则无需指定格式
文件
“此内置数据源类型基于用于Oracle的.NET Framework托管提供程序,需要Oracle客户端软件组件。”
对于“此内置数据源类型直接使用Oracle数据提供程序,并且需要Oracle客户端软件组件。”报告是否都调用存储过程,您可以在传递到报告之前更新日期格式?或d