我们正在使用远程系统提供的存储过程。出于测试目的,我从我的开发机器中调用此过程。现在的问题是,如果我从 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代码。
答案 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