【问题标题】:Connect R to Oracle database/server (ROracle, RODBC...)将 R 连接到 Oracle 数据库/服务器(ROracle、RODBC...)
【发布时间】:2016-05-19 05:45:52
【问题描述】:

我正在尝试将 R 连接到数据库(我只想指出我对数据库没有任何经验,这就是为什么我希望您能给我一些提示)。起初我尝试使用来自this post 的代码的 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 上也是如此,但我根本不明白。提前致谢

【问题讨论】:

  • 使用 RODBC,您还必须将 jar 文件(驱动程序)放在特定目录中。你做到了吗?
  • 我还没有这样做,正如我所写的那样,不幸的是我目前对数据库的了解很差。带有驱动程序的 jar 文件?你能再给我解释一下吗?关于 ROracle,我做对了吗?连接完成了吗?
  • 首先,您的计算机上安装了 Oracle 吗?你的用户名用户名和密码是 pwd 吗?
  • 好吧,我的计算机上没有安装 Oracle,我已连接到与 Oracle 连接的服务器。那么对于用户名和密码,这就是一个例子
  • ch &lt;- odbcConnect("K",uid="user", pwd = "pwd")。这里“K”是您的数据库名称。先试试这个包RODBC

标签: r database oracle rodbc roracle


【解决方案1】:

试试这个示例

require(Roracle)
Con=dbConnect(dbDriver("Oracle"),"IP/SID",username="xxx",password="xxx")
Q=dbSendQuery(Con,"Select ….")
F=fetch(Q)
head(F)

【讨论】:

  • “Select ...”是指列名吗?
  • 似乎连接有效,但 dbSendQuery(--) 无效。我使用了代码rs &lt;- 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
  • (Con,"Select ....") 表示(Con,"Select * From Schema.Table") 或像这样,任何 SQL
  • 我刚刚尝试过,遇到了同样的错误Fehler in .oci.SendQuery(conn, statement, data = data, prefetch = prefetch, : ORA-00942: table or view does not exist。而且我确定该表存在
  • 首先:尝试在 Oracle 中使用其他模式进行查询,此消息可能意味着您忘记了某些表或函数的 schame 名称。如果有效,请发送 R 结果完成跨度>
【解决方案2】:

尝试使用 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)

【讨论】:

    猜你喜欢
    • 2014-03-02
    • 2019-05-24
    • 2018-07-05
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多