Проблема с получением в ROracle
У меня возникают проблемы при извлечении большого объема данных с использованием ROracle (у меня есть права только на чтение для базы данных Oracle). Поскольку количество данных превышает> 4 гигабайта, я не могу использовать dbGetQuery из ROracle, который отлично работает.
Вместо этого я пытаюсь использовать выборку dbSendQuery +, но, похоже, она не работает с Oracle. (Отлично работает с пакетом RmySQL)
Например:
С моей версией Oracle:
dbGetQuery(con2, "select * from PRODUCT_COMPONENT_VERSION")
PRODUCT VERSION STATUS
NLSRTL 10.2.0.3.0 Production
Oracle Database 10g Enterprise Edition 10.2.0.3.0 Prod
PL/SQL 10.2.0.3.0 Production
TNS for 32-bit Windows: 10.2.0.3.0 Production
если я попробую:
query <- "SELECT * FROM BFMXML_SUIVI"
rs <- dbSendQuery(con2, query, bulk_read = 10000L, prefetch = T)
test <- fetch(rs, n = 10)
dim(test)
[1] 1 13
dbGetRowCount(rs)
[1] 1
Но я ожидаю получить 10 строк...
Затем снова получаю:
test <- fetch(rs, n = 10)
dim(test)
[1] 1 13
dbGetRowCount(rs)
[1] 1
Следовательно, следующая строка не была извлечена и, глядя на результат теста, я вижу, что он заполнен только нулями (что неверно + это было не так при первом вызове выборки)
Видите ли вы альтернативу / решение?
1 ответ
Быстрые, и я должен добавить, что у меня нет бэкэнда Oracle, пригодного для тестирования этого:
Я предпочитаю один
res <- dbGetQuery(con, query)
позвонить черезdbSendQuery()
а такжеfetch()
сочетание.Я вспоминаю предыдущие обсуждения по списку r-sig-db, где было указано, что некоторые бэкэнды "лгут" о количестве данных, готовых к извлечению, используя
n = -1
часто предлагалось в качестве исправления. Однако это, возможно, было в контекстеRODBC
,