会话如何获得初始时区

How do sessions get their initial timezone

当我在 SQL 开发人员 中使用

检查会话时区时
select sessiontimezone from dual;

我得到 'Europe/Berlin'。当我在 SQL*Plus 中做同样的事情时,我得到 '+02:00'.

这在处理 TIMESTAMP WITH LOCAL TIMEZONE 时会有所不同,因为由于夏令时,德国有时处于 UTC+01 时区,有时处于 UTC+02 时区。 (目前是 UTC+02。)

这两个工具如何获取/设置(?)它们的默认时区?

系统信息:

documentation只列出环境变量ORA_SDTZ

但是,它取自以下设置:

  • 注册表项HKCU\SOFTWARE\ORACLE\KEY_{Oracle Home Name}\ORA_SDTZ

  • 注册表项HKLM\SOFTWARE\ORACLE\KEY_{Oracle Home Name}\ORA_SDTZ

    (对应 HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_{Oracle Home Name}\ORA_SDTZ

  • 环境变量ORA_SDTZ

  • 您机器的当前区域设置(最有可能)。

  • 数据库时区如果从上面找到none(只是一个假设)

您的客户端应用程序可能有一些额外的会话时区来源,请参见 How to change the timezone of Oracle SQL Developer / Oracle Data Modeler? 作为示例。

环境变量应具有最高优先级。