Я подключаюсь к базе данных Oracle через DNS (настройте соединение на tnsnames.ora с именем «база данных»).
Я могу успешно запустить следующий код:
con <- DBI::dbConnect(odbc::odbc(),
"database",
UID = "user",
PWD = "password",
trusted_connection = TRUE)
Я также могу успешно перечислить все таблицы в базе данных с помощью:
list <- dbListTables(con)
View(list)
Однако когда я бегу:
results <- sqlQuery(channel = con, query = "select * from myschemaname.table")
Я получаю сообщение об ошибке:
Error in sqlQuery(channel = con, query = "select * from myschemaname.table") :
first argument is not an open RODBC channel
У меня есть права владельца, и я также могу обновлять таблицы Excel, подключенные к этой базе данных через ODBC. Если это пригодится, вот результат str (con)
str(con)
Formal class 'Oracle' [package ".GlobalEnv"] with 4 slots
..@ ptr :<externalptr>
..@ quote : chr "\""
..@ info :List of 13
.. ..$ dbname : chr ""
.. ..$ dbms.name : chr "Oracle"
.. ..$ db.version : chr "11.02.0040"
.. ..$ username : chr "user"
.. ..$ host : chr ""
.. ..$ port : chr ""
.. ..$ sourcename : chr "database"
.. ..$ servername : chr "database"
.. ..$ drivername : chr "SQORA32.DLL"
.. ..$ odbc.version : chr "03.80.0000"
.. ..$ driver.version : chr "11.02.0001"
.. ..$ odbcdriver.version : chr "03.52"
.. ..$ supports.transactions: logi TRUE
.. ..- attr(*, "class")= chr [1:3] "Oracle" "driver_info" "list"
..@ encoding: chr ""
Вот и все, спасибо вам большое! Теперь я успешно использую con <- odbcConnect ("database", uid = "user", pwd = "password") для использования функций RODBC. Я новичок в stackoverflow, поэтому мне нужно написать окончательный ответ или это зависит от вас? знак равно
Сформулирую ответ, как только будет время :).





Вы используете RODBC::sqlQuery() для соединения, созданного с DBI::dbConnect(). Либо используйте DBI::dbGetQuery() с DBI::dbConnect(), либо создайте соединение с RODBC::odbcConnect() и используйте RODBC::sqlQuery().
Итак, у меня было что-то вроде этого подключения к базе данных SQL Server. В конце концов, мне пришлось изменить Trusted_Connection = TRUE на Trusted_Connection = Yes ...
Другой контекст, но та же ошибка: Если таблица вашей БД состоит из чисел, вам в первую очередь необходимо загрузить объект (nameofyourtable) класса xts:
>library(RODBC)
>library(DMwR)
>library(xts)
>data(nameofyourtable)
sqlQueryиз пакетаRODBC. Может быть, вам нуженODBC::-эквивалентRODBC::sqlQuery()для использования вашего соединенияDBI::dbConnect()?