RJDB C запросы к полям Oracle NUMBER (22,0) дают неверные результаты - PullRequest
1 голос
/ 01 мая 2020

Я отправляю запросы в конкретную базу данных Oracle от R по RJDB C более трех лет. Все это время результаты в R, казалось, совпадали с результатами, которые я получал бы в браузере базы данных (в моем случае это DBeaver).

Теперь я пишу запросы к таблице с первичным NUMBER (22,0) и внешние ключи со значениями в миллиардах (> 1 000 000 000).

А теперь результаты в R не совпадают с результатами в DBeaver. Эти данные являются конфиденциальными, и я не нашел способа проиллюстрировать свою проблему без раскрытия данных, и я до сих пор не дошел до точки репликации проблемы в базе данных Oracle моего собственного создания. Я открыт для любых предложений!

Пример запроса:

SELECT
    PK_PATIENT_IDENTIFIER_ID
FROM
    PATIENT_IDENTIFIERS pi1
WHERE
    FK_PATIENT_ID = <SECRET>
ORDER BY
    PK_PATIENT_IDENTIFIER_ID

В DBeaver я получаю 6 строк со значениями в диапазоне 70 000 000 - 75 000 000.

Когда отправленный в R (см. ниже), я получаю 8 строк со значениями в диапазоне от 100 000 000 до 300 000 000.

Находятся ли мои значения в блоке where, получающем какой-либо полусовместимый тип? Нужно ли где-то утверждать, что это длинные целые числа?

driver <-
  JDBC(driverClass = "oracle.jdbc.OracleDriver",
       classPath = config$oracle.jdbc.path)

con.string <- paste0("jdbc:oracle:thin:@//",
                     config$host,
                     ":",
                     config$port,
                     "/",
                     config$database)

Connection <-
  dbConnect(driver,
            con.string,
            config$user,
            config$pw)

query <- "SELECT
PK_PATIENT_IDENTIFIER_ID
FROM
PATIENT_IDENTIFIERS pi1
WHERE
FK_PATIENT_ID = <SECRET>
ORDER BY
PK_PATIENT_IDENTIFIER_ID"

query.res <- dbGetQuery(Connection, query)

...