Получение предельной ошибки в предложении для запроса oracle (ORA-01795) при использовании RJDBC - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь выполнить 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.

...