【发布时间】:2011-12-13 08:48:47
【问题描述】:
我们正在使用远程系统提供的存储过程。出于测试目的,我从我的开发机器调用此过程。现在的问题是,如果我从 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 代码,我使用 thin driver。
【问题讨论】:
-
vt_User.EXPDATE 的类型是什么?你确定这是日期而不是时间戳?
-
它的类型为
TIMESTAMP WITH TIME ZONE -
当你这样做时会得到什么:select sessiontimezone, dbtimezone from dual;
-
尝试 ALTER SESSION SET TIME_ZONE=dbtimezone;或将数据类型更改为 TIMESTAMP WITH LOCAL TIME ZONE
-
太棒了!
ALTER SESSION SET TIME_ZONE=dbtimezone;有效。非常感谢。
标签: oracle stored-procedures plsql oracle-sqldeveloper toad