programing

SQL Server Reporting Services의 Oracle Date 형식 예외

telecom 2023. 10. 17. 20:01
반응형

SQL Server Reporting Services의 Oracle Date 형식 예외

이전에 제 클라이언트는 Oracle과 함께 SSRS 2008R2를 트랜잭션 데이터베이스로 사용하고 있었습니다.최근 SSRS 2017으로 업그레이드되었으며, 현재 많은 보고서에서 다음과 같은 오류가 발생하고 있습니다.

오류: Microsoft를 던지는 중입니다.보고 서비스.보고서 처리 중입니다.처리 중단됨예외: [비정상 종료:Report Processing], 마이크로소프트.보고 서비스.보고서 처리 중입니다.처리 중단됨예외:보고서 처리 중 오류가 발생했습니다. ---> Microsoft.보고 서비스.보고서 처리 중입니다.보고서 처리 예외:데이터 집합 'Ds_Main'에 대한 쿼리를 실행하지 못했습니다. ---> Oracle.관리되는 데이터 액세스.고객.Oracle Exception: ORA-01830: 전체 입력 문자열을 변환하기 전에 날짜 형식 그림이 종료됩니다.

보고서 쿼리를 자세히 조사한 결과, 이 오류가 오라클 기능을 하는 모든 보고서에 대한 것임을 알게 되었습니다.TO_DATE(<Date Value>)날짜 형식 없이 사용되었습니다.예를 들어,

To_date(:Date_Parameter) -> this syntax throws above mentioned error
To_Date(:Date_Parameter,’MM/DD/YYYY’) -> this syntax works perfectly

알고 싶습니다.

  1. SSRS 2017과 SSRS 2008 R2에서 변경된 사항은 SSRS 2008 R2에서 동일한 보고서가 예상대로 작동하고 SSRS 2017에서 위의 오류를 던지고 있기 때문에 이 문제를 야기합니다.
  2. 보고서를 업데이트하지 않고 이 문제를 해결할 수 있는 제안이 있습니까?

SSRS2017과 SSRS2008R2에서 달라진 점

SSRS 2008은 구형 시스템을 사용했습니다.데이터.오라클 클라이언트.SSRS 2016 이상에서는 Oracle ODP를 설치해야 합니다.오라클에서 구축 및 지원하는 NET 프로바이더.따라서 두 드라이버에 의해 NLS_DATE_FORMAT 세션 파라미터가 설정되는 방식의 차이일 수 있습니다.

다음 쿼리를 사용하여 보고서에 데이터 집합을 추가하면 설정을 볼 수 있습니다.

select parameter, value 
from nls_session_parameters 
where parameter like 'NLS%'
order by parameter

안타깝게도 Oracle에서 클라이언트 날짜 형식을 글로벌하게 변경할 수 있는 방법이 없는 것 같습니다.ManagedDataAccess를 사용하므로 보고서 데이터셋 쿼리를 모두 변경해야 합니다.

또는 문자열 매개변수가 아니라 날짜 매개변수를 전달하는지 확인할 수 있습니다.Oracle의 To_date() 함수에 날짜를 전달하는 경우 형식을 지정할 필요가 없습니다.

SSRS 2014의 문서 "이 기본 제공 데이터 소스 유형은 다음을 기반으로 합니다.오라클용 NET Framework Managed Provider이며 오라클 클라이언트 소프트웨어 구성 요소가 필요합니다."

또한 SSRS 2016의 경우 "이 기본 제공 데이터 소스 유형은 Oracle Data Provider를 직접 사용하며 Oracle 클라이언트 소프트웨어 구성 요소가 필요합니다."

문제를 파악하는 중입니다.

비주얼 스튜디오 업그레이드와 관련된 문제는 아닌 것 같습니다.매개 변수로 전달된 날짜 형식과 관련이 있습니다.TO_DATE()기능.

Oracle / PLSQL 공식 문서 기반 ORA-01830 오류 메시지:

원인: 날짜 값을 입력하려고 했지만 입력한 날짜가 날짜 형식과 일치하지 않습니다.

Oracle에서 기본 날짜 형식은 일반적으로 DD-MON-YYYY입니다.이 형식에 맞지 않는 날짜 값을 입력하려고 할 경우.

의 날짜 매개 변수를 통과한 것 같습니다.dd-MMM-yyyy형식은 이제 다음과 같이 전달됩니다.MM/dd/yyyy.

우선 지역 설정이나 애플리케이션 문화 정보가 변경되지 않았는지 확인합니다.


가능한 해결 방법

다음과 같은 몇 가지 방법을 사용하여 문제를 해결할 수 있습니다.

(1) 매개변수 날짜 형식 처리

모든 코드를 편집하지 않으려면 매개 변수 데이터 문자열 형식을 강제로 지정하는 것이 더 쉽습니다. 모든 매개 변수가 다음 값으로 전달되었는지 확인합니다.TO_DATE()함수의 형식은 다음과 같습니다(또는 OS 지역 설정에서 기본 날짜 형식을 변경해 보십시오).

dd-MMM-yyyy   example: 01-AUG-2019

(2) TO_DATE 함수에 날짜 형식 추가

날짜 매개 변수 형식이 고정되어 있고 변경되지 않을 경우 질문에서 언급한 대로 코드를 편집할 수 있습니다.

To_Date(:Date_Parameter,’MM/DD/YYYY’)

(3) 날짜 및 형식을 매개 변수로 전달

또한 코드를 변경해야 하지만 날짜와 형식을 매개 변수로 전달합니다.

To_Date(:Date_Parameter,:DateFormat_Parameter)

다른 메소드는 다음 링크에서 찾을 수 있습니다.


업데이트 1 - 여러 보고서에서 공통으로 변경

검색하는 동안 보고서를 루프오버하고 변경할 수 있는 방법을 제공하는 다음 링크를 발견했습니다.교체만 하면 됩니다.To_Date(:Date_Parameter)와 함께To_Date(:Date_Parameter,’MM/DD/YYYY’):


업데이트 2 - 기타 가능한 해결 방법

ReportViewer.aspx를 편집하여 문화 정보 강제 적용

편집할 수 있습니다.ReportViewer.aspx파일은 SQL Server reporting services 디렉토리에 있으며 보고서 내에서 사용되는 culture 정보를 강제로 적용합니다.다음 질문을 확인해 보십시오. 자세한 내용이 나와 있습니다.

브라우저 언어 설정 변경

다음 링크를 확인합니다(Mike Honey와 Nick St Mags의 답변 읽기).


업데이트 3 - 문제 원인

@David Brownie가 게시한 내용 외에도 SQL Server 2008 R2 설명서를 찾았습니다.

그들이 언급한 부분:

이 기본 제공 데이터 원본 유형은 를 기반으로 합니다.오라클용 NET Framework Managed Provider이며 오라클 클라이언트 소프트웨어 구성 요소가 필요합니다.

또한 SQL Server 2017 설명서를 살펴보면 다음과 같습니다.

이 기본 제공 데이터 원본 유형은 오라클 Data Provider를 직접 사용하며 오라클 클라이언트 소프트웨어 구성 요소가 필요합니다.

또한 Microsoft OLE DB Provider for Oracle 설명서(이전의 사용된 공급자)를 참조하십시오.그들은 다음과 같이 언급했습니다.

이 기능은 이후 버전의 Windows(윈도우)에서는 제거됩니다.새 개발 작업에서 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 응용프로그램을 수정하도록 계획합니다.대신 Oracle의 OLE DB 공급자를 사용합니다.

Reporting Services에서 Oracle에 연결하는 데 사용되는 공급자를 변경한 이유입니다.

언급URL : https://stackoverflow.com/questions/55143822/oracle-date-format-exception-in-sql-server-reporting-services

반응형