to_char根据调用过程的位置生成不同的输出

时间:2011-12-13 08:48:48

标签: oracle stored-procedures plsql oracle-sqldeveloper toad

我们正在使用远程系统提供的存储过程。出于测试目的,我从我的开发机器中调用此过程。现在的问题是,如果我从 Toad 调用该过程,一切正常。但是当我使用 SQL Developer 调用它时会发生错误。

我进行了调试和调试,发现了这一点:在程序中,生成过期日期并传递给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,从 Toad 调用时生成如下:

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

但是如果我从 SQL Developer 打电话,那就像是:

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

除了这些线以外的所有内容都完全相同。我尝试了很多不同的方法,尝试设置NLS_LANG,改变会话等但没有结果。

我需要解决这个问题,因为当我从 Java 代码调用该过程时也会发生同样的事情,这是主要问题。

我使用Toad和SQL Developer的 TNS 连接到远程数据库,瘦驱动程序用于Java代码。

2 个答案:

答案 0 :(得分:1)

在Oracle DB中,您基本上具有数据库的TIME_ZONE定义,但您可以为会话更改它。 在这种情况下,DB time_zone设置为UTC格式的绝对偏移量,这是您想要的。 可能是SQL Developer以时区区域名称格式打开会话,如下所示:

select sessiontimezone, dbtimezone from dual;

因此,将会话更改为dbtimezone可能有所帮助。

ALTER SESSION SET TIME_ZONE=dbtimezone;

答案 1 :(得分:0)

使用tzh和tzm有另一个解决方案:

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