Я пытаюсь выполнить dbGetQuery, в котором я передаю более 1000 элементов в условии «in» условия.
ПОДХОД A
Подготовить запрос
queryToRun <- paste("select ",uniqueTargetColumn,",",targetColumn," from ",targetTable," where ",uniqueTargetColumn," in ",queryStrings,sep="")
JDB C Соединение
jdbcConnection <- dbConnect(jdbcDriver, "jdbc:oracle:thin:@..........
Получить результат в кадре данных
actualOutput<-data.frame(dbGetQuery(jdbcConnection, queryToRun),stringsAsFactors = FALSE)
Поскольку в queryStrings в queryRoRun содержится более 1000 записей (определяется временем выполнения), я получаю ORA-01795 .
ПОДХОД B
Чтобы преодолеть это, я передаю каждое значение в queryStrings одно за другим, то есть каждое условие where будет проверять одно значение, которое требует времени и неэффективно.
Я думал об использовании параметризованных запросов:
dbGetQuery(jdbcConnection,"SELECT * from MYTABLE where ID_NO = ?", params =as.list(expectedOutput[,1]))
, где Ожидаемый выходной - это фрейм данных с одним столбцом со всеми возможными значениями, которые были частью queryStrings в APPROACH A.
, однако я получаю: Предупреждение :
In if (is.na(v)) { :
the condition has length > 1 and only the first element will be used
Как обойти эту проблему с помощью в предложении в R?
Als o в моих таблицах есть дата в формате DD-MON-YY, однако она читается в формате YYYY-MM-DD чч: мм: ss.s с помощью dbGetQuery, есть ли способ предотвратить это? Я попытался as.is = TRUE , но похоже, что он не поддерживается dbGetQuery.
PS Я должен использовать RJDB C с oracle.