Я переключаюсь с использования пакета ROracle на использование пакета odbc для подключения к Oracle.Используя ROracle, я смог вставить дату и время в миллисекундах в таблицу с полем типа данных timestamp.При использовании пакета odbc миллисекунды теряются.Кроме того, когда я запрашиваю дату, которую я только что вставил, время сдвигается на четыре часа вперед (я на востоке, поэтому, по-видимому, он переходит на время UTC).Я подтвердил, что время правильно вставлено в Oracle.Есть ли опция, которую можно установить так, чтобы миллисекунды сохранялись, и есть ли способ предотвратить смещение времени?
library(odbc)
options(digits.secs = 6)
Sys.setenv(TZ = "EST5EDT",
ORA_SDTZ = "EST5EDT")
conn <- DBI::dbConnect(odbc::odbc(),
driver = "Oracle12c",
uid = rstudioapi::showPrompt(title = "username", message = "username", default = ""),
pwd = rstudioapi::askForPassword(),
dbq = "dbname",
timezone = Sys.timezone())
DBI::dbExecute(conn, "create table test_table (datetime timestamp(6))")
df <- data.frame(DATETIME = Sys.time(), stringsAsFactors = FALSE)
# the time has milliseconds in R
print(df)
# insert data
res <- dbSendStatement(conn, "insert into test_table (datetime) values (:1)")
dbBind(res, df)
dbGetRowsAffected(res)
dbClearResult(res)
# the time does not have milliseconds when read back from Oracle and is shifted four hours forward
dbGetQuery(conn, "select * from test_table")