Подключить R к базе данных/серверу Oracle (ROracle, RODBC)

Я пытаюсь подключить R к базе данных (я просто хочу отметить, что у меня нет опыта работы с базами данных, поэтому я надеялся, что вы можете дать мне несколько советов). Сначала я попробовал пакет ROracle, используя код из это сообщение:

library(ROracle)
host <- "xxx.xxx.xx.xxx"
port <- 1521
service <- "K" #? not sure exactly what does it mean service, is it name of server?i cannot really find any informations about it
drv <- dbDriver("Oracle")

connect.string <- paste(

  "(DESCRIPTION=",

  "(ADDRESS=(PROTOCOL=tcp)(HOST=", host, ")(PORT=", port, "))",

  "(CONNECT_DATA=(SERVICE_NAME=", service, ")))", sep = "")

con <- dbConnect(drv, username = "user", password = "pwd", dbname = connect.string)

Я не получил никакого сообщения об ошибке, однако, когда я использовал команду

dbGetInfo(con)

Я получил следующий ответ:

$username
[1] "user"

$dbname
[1] "(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xxx.xxx.xx.xxx)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=K)))"

$serverVersion
[1] "xx.x.x.x.x"

$serverType
[1] "Oracle RDBMS"

$resTotal
[1] 0

$resOpen
[1] 0

$prefetch
[1] FALSE

$bulk_read
[1] 1000

$bulk_write
[1] 1000

$stmt_cache
[1] 0

$results
list()

при проверке документации о ROracle я узнал, что:

$resTotal Количество наборов результатов для этого подключения

$resOpen Количество наборов результатов, открытых в этом соединении.

которые в моем случае равны 0, означает ли это, что я подключен или нет? Я просто не могу понять, как я могу проверить, подключен ли я к базе данных/серверу.

Затем я решил проверить пакет RODBC:

library(RODBC)
ch <- odbcConnect("K",uid="user", pwd = "pwd") # again question what is the first parameter? should it be server name?
odbcGetInfo(ch)

Это закончилось хуже с ошибкой:

Warnmeldungen:
1: In odbcDriverConnect("DSN=K;UID=user;PWD=pwd") :
  [RODBC] FEHLER: Status IM002, Code 0, Nachricht [unixODBC][Driver Manager]Data source name not found, and no default driver specified
2: In odbcDriverConnect("DSN=K;UID=user;PWD=pwd") :
  ODBC-Verbindung fehlgeschlagen
> 
> odbcGetInfo(ch)
Fehler in odbcGetInfo(ch) : Argument ist kein offener RODBC-Kanal

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


person Mal_a    schedule 09.02.2016    source источник
comment
с RODBC вы также должны поместить файл jar (драйверы) в определенный каталог. Вы сделали это?   -  person CuriousBeing    schedule 09.02.2016
comment
я этого не делал, как я уже писал, к сожалению, мои знания о базах данных на данный момент плохие. Jar-файл с драйверами? Не могли бы вы объяснить мне немного больше? а насчет ROracle, правильно ли я сделал?   -  person Mal_a    schedule 09.02.2016
comment
Во-первых, у вас установлен Oracle на вашем компьютере? Ваше имя пользователя и пароль pwd?   -  person CuriousBeing    schedule 09.02.2016
comment
Ну, у меня на компьютере не установлен Oracle, я подключен к серверу, который имеет подключение к Oracle. Ну, для имени пользователя и пароля, это пример   -  person Mal_a    schedule 09.02.2016
comment
ch <- odbcConnect("K",uid="user", pwd = "pwd"). Здесь K — имя вашей базы данных. Сначала попробуйте это, используя пакет RODBC   -  person CuriousBeing    schedule 09.02.2016
comment
Эй, MaxPD, это не сработало ... :( Та же ошибка!   -  person Mal_a    schedule 09.02.2016
comment
У вас есть клиент БД, который вы можете использовать для подключения к БД?   -  person CuriousBeing    schedule 09.02.2016
comment
Да (oracle.com/technetwork/database/ функции/мгновенный клиент/)   -  person Mal_a    schedule 09.02.2016


Ответы (2)


попробуй с этим образцом

require(Roracle)
Con=dbConnect(dbDriver("Oracle"),"IP/SID",username="xxx",password="xxx")
Q=dbSendQuery(Con,"Select ….")
F=fetch(Q)
head(F)
person Hossein Vatani    schedule 09.02.2016
comment
Означает ли Select... имя столбца? - person Mal_a; 10.02.2016
comment
Вроде соединение работает, но dbSendQuery(--) не работает. Я использовал код rs <- dbSendQuery(con, "Select name of the column.") и получил ошибку Fehler in .oci.SendQuery(conn, statement, data = data, prefetch = prefetch, : ORA-01747: invalid user.table.column, table.column, or column specification. - person Mal_a; 10.02.2016
comment
(Con,Select ….) означает (Con,"Select * From Schema.Table") или подобное, любой SQL - person Hossein Vatani; 10.02.2016
comment
Я только что попробовал и получил ту же ошибку Fehler in .oci.SendQuery(conn, statement, data = data, prefetch = prefetch, : ORA-00942: table or view does not exist. И я уверен, что таблица существует - person Mal_a; 10.02.2016
comment
во-первых: попробуйте свой запрос в Oracle с другой схемой, это сообщение может означать, что вы забыли имя schame для какой-то таблицы или функции. если это работает, отправьте полный результат R - person Hossein Vatani; 10.02.2016
comment
ну, я попробовал tabellen <- dbListTables(con), и он дал мне пустой список, значит, что-то не так с подключением - person Mal_a; 10.02.2016

попробуй с RJdbc

Примечание: установите пакеты RJdbc и rjava.

library(RJDBC)

driver <- JDBC("oracle.jdbc.OracleDriver",
            classPath="C:/app/../product/12.1.0/client_1/jdbc/lib/ojdbc7.jar"," ")

connection <-dbConnect(driver,"jdbc:oracle:thin:@host:port:SID","USERNAME","PASSWORD")

results <- dbGetQuery(connection, "SELECT COUNT(*) FROM TABLENAME")

print(results)
dbDisconnect(connection)
person Raviteja Gujjula    schedule 02.04.2018