1

我正在尝试从客户端使用 ROracle 连接到远程 Oracle 数据库。

建立连接后,我执行这个查询:

dat = dbGetQuery(con, "SELECT * FROM TABLE_01")

这会导致错误:

.oci.GetQuery 中的错误(conn,statement,data = data,prefetch = prefetch,:try 中的错误({:ORA-01805:日期/时间操作中可能存在错误

我在服务器端检查了数据库版本:

SELECT * FROM V$VERSION

PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0  Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

然后我在客户端运行genezi:

    genezi -v

System name:    Linux
Release:        4.4.0-36-generic
Version:        #55-Ubuntu SMP Thu Aug 11 18:01:55 UTC 2016
Machine:        x86_64

Operating in Instant Client mode.
Small timezone file = timezone_14.dat
Large timezone file = timezlrg_14.dat

客户端和服务器的 Oracle 版本都是 11.2。但是时区文件似乎有所不同。如何解决这个问题?

4

2 回答 2

1

当我在 docker 容器中运行我的 Ruby on Rails 应用程序时遇到此错误。(在容器外运行应用程序时没有发生错误。)

我需要从我的 Dockerfile 中删除这一行:

ENV TZ America/New_York

来自 config/application.rb 的这些行:

config.time_zone = 'Eastern Time (US & Canada)'
config.active_record.default_timezone = :local

这似乎解决了问题。

于 2021-02-15T15:11:20.960 回答
1

您很可能在数据库服务器和客户端之间安装了不同的时区。

检查数据库版本:

select * from v$timezone_file;

检查客户端版本:

genezi -v

(您已经完成了 - 您的客户在 14 岁。我怀疑数据库正在使用更新的版本)。

于 2017-01-24T00:45:03.803 回答