2011-12-13 3 views
1

우리는 원격 시스템에서 제공하는 저장 프로 시저를 사용하고 있습니다. 테스트를 위해 개발 컴퓨터에서이 프로 시저를 호출합니다. 이제 문제는 제가 두꺼비에서 절차를 호출하는 경우입니다, 다 괜찮습니다. 그러나 SQL Developer을 사용하여 호출하면 오류가 발생합니다.to_char은 프로 시저가 호출되는 위치에 따라 다른 출력을 생성합니다.

디버깅하고 디버깅하여 발견했습니다. 절차에서 만료 날짜가 생성되어 웹 서비스로 전달됩니다 (이유는 묻지 않음).

다음

날짜 생성을 담당 라인은 다음과 같습니다

vt_User.EXPDATE := TO_DATE('01.01.2025', 'dd.mm.yyyy'); 
vs_Value := to_char(vt_User.EXPDATE, 'YYYY-MM-DD"T"HH24:MI:SSTZR'); 

vs_Value을 두꺼비에서 호출 할 때 같이 생성됩니다

2025-01-01T00:00:00+02:00 

하지만 SQL 개발자에서 호출하는 경우 예 :

2025-01-01T00:00:00EUROPE/ATHENS 

이 행을 제외한 모든 항목이 완전히 동일합니다. 나는 NLS_LANG를 설정하고, 세션을 변경하는 등 많은 다른 접근법을 시도했지만 아무런 결과도 얻지 못했습니다.

나는이 절차를 Java 코드에서 호출하면 동일한 문제가 발생하기 때문에이 문제를 해결해야합니다. 이것이 주요 문제입니다.

나는 두꺼비와 SQL 개발자, 자바 코드에 대한 얇은 드라이버에 대한 TNS를 사용하여 원격 데이터베이스에 연결합니다.

+0

vt_User.EXPDATE의 유형은 무엇입니까 :

ALTER SESSION SET TIME_ZONE=dbtimezone; 

+0

그것은'TIMESTAMP WITH TIME ZONE'입니다. – SelimOber

+0

그리고 다음과 같이하면 얻을 수있는 것 : sessiontimezone, dualtime에서 dbtimezone을 선택하십시오; –

답변

1

Oracle DB에서 기본적으로 DB에 대한 TIME_ZONE 정의가 있지만 세션에 대해 변경할 수 있습니다. 이 경우 DB time_zone은 원하는 UTC 형식의 절대 오프셋으로 설정됩니다. dbtimezone 도움이 될 수로로 세션을 변경, 그래서

select sessiontimezone, dbtimezone from dual; 

: 함께 볼 수 있기 때문에 은 아마도 SQL Developer는, 시간대 지역 이름 형식으로 세션을 열었다.

select to_char(current_timestamp, 'yyyy-mm-dd"T"hh24:mi:sstzh:tzm') from dual 
0

는 tzh 및 TZM를 사용하여 다른 솔루션을? 날짜가 아닌 타임 스탬프가 맞습니까?