2017-09-13 84 views
0

我們安裝了Data Studio 4.1.0.0 Client來訪問存儲在DB2中的數據。我們在裝有Windows 7 64位的PC上安裝了DB2 11.1 64bit。如何從R連接DB2?

我需要從64位R.連接到DB2數據

我們嘗試了以下

library (RODBC) 

driver.name <- "{IBM DB2 ODBC DRIVER}" 
db.name <- "SBXSHRD" 
host.name <- "XX.XXX.X.XX" 
port <- "60012" 
user.name <- "X20XX4" 
pwd <- "SXXXXX01" 

#Connection String 
con.text <- paste ("DRIVER =", driver.name, 
                   "; Database =", db.name, 
                   "; Hostname =", host.name, 
                   "; Port =", port, 
                   "; PROTOCOL = TCPIP", 
                   "; UID =", user.name, 
                   "; PWD =", pwd, sep = "") 

#Connect to DB2 
con1 <- odbcDriverConnect (con.text) 

top <- sqlQuery (con1, 
               "SELECT * 
               FROM ODS_CANALES_LINK.VW_OP_D_TRANSACCIONCANAL 
               where CODMES_PROC = 201708 
               FETCH FIRST 3 ROW ONLY 
               ", 
               errors = FALSE) 

但我得到r中

> con1 <- odbcDriverConnect(con.text) 
Warning messages: 
1: In odbcDriverConnect(con.text) : 
    [RODBC] ERROR: state IM004, code 0, message [Microsoft][Administrador de controladores ODBC] Error de SQLAllocHandle del controlador en SQL_HANDLE_ENV 
2: In odbcDriverConnect(con.text) : ODBC connection failed 

這裏的詳細結果如下我們擁有的DB​​2以及我們正在做什麼的快照R

enter image description here

enter image description here

+0

在你的形象不符合您要求使用(11.1)的DB2版本的DB2服務級別(10.5.0.8)。 – Wieland

+0

您是否嘗試了IBM頁面上的建議http://www-01.ibm.com/support/docview.wss?uid=swg21229860 – mao

回答

0

RJDBC工作得很好。但是......有一次,在完成docker鏡像的重建之後,我得到了所有結果集的更改列名稱,因爲它們將名稱從jdbc函數getColumnName更改爲getColumnLabel。

https://github.com/s-/RJDBC/commit/7f1c1eec25ed90ec5ed71141189b816e2a3c2657

library(RJDBC) 
CONSTR <- "jdbc:db2://hostname:446/database" 
jcc = JDBC("com.ibm.db2.jcc.DB2Driver", "db2jcc4.jar") 

connect <- function() { 
    dbConnect(jcc, CONSTR, user="scott", password="tiger") 
} 

dept <- function() { 
    con <- connect() 
    sql <- "SELECT DEPTNO, DEPTNAME FROM DSN8710.dept"  
    rs <- dbSendQuery(con, sql) 
    x <- dbFetch(rs) 
    dbClearResult(rs) 
    # change column names, because the names are not stable! 
    names(x) <- c('DEPTNO', 'DEPTNAME') 
    dbDisconnect(con) 
    x 
}