2011-12-13 67 views
1

我們正在使用遠程系統提供的存儲過程。出於測試目的,我從我的開發機器調用此過程。現在的問題是,如果我打電話從蟾蜍程序,一切都OK。但是當我使用SQL Developer調用它時會發生錯誤。to_char根據調用過程的位置產生不同的輸出

我調試和調試,發現這一點:在該過程中,過期日期生成並傳遞給Web服務(不要問我爲什麼)。

這裏是負責生成日期行:

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代碼中調用程序時也會出現同樣的情況,這也是主要問題。

我連接到使用TNS的蟾蜍和SQL Developer中,薄的Java代碼驅動程序遠程數據庫。

+0

什麼是vt_User.EXPDATE的類型?你確定這是一個日期而不是時間戳嗎? –

+0

它是'TIMESTAMP WITH TIME ZONE'的類型' – SelimOber

+0

當你這樣做時會得到什麼:select dualtime中的sessiontimezone,dbtimezone; –

回答

1

在Oracle DB中,您基本上有一個針對數據庫的TIME_ZONE定義,但您可以將其更改爲一個會話。 在這種情況下,數據庫time_zone設置爲UTC格式的絕對偏移量,這正是您想要的。 大概SQL Developer打開的時區區域名稱格式的會話,如可以用可看出:

select sessiontimezone, dbtimezone from dual; 

所以,改變會議是爲DBTIMEZONE可能會有幫助。

ALTER SESSION SET TIME_ZONE=dbtimezone; 
0

有使用TZH和TZM另一種解決方案:

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