2011-12-13 14 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 
相关问题