簡體   English   中英

RODBC與Oracle數據庫的連接不起作用,導致R崩潰

[英]RODBC connection to Oracle database not working, crashes R

我有許多腳本可以在Windows XP上通過ODBC從Oracle 10g數據庫中獲取數據,這些腳本已經運行了好一陣子。 我最近設置了一個新的Oracle帳戶,以從同一數據庫的另一個架構中提取數據,但是,當我使用該帳戶和不同的架構進行測試時,會得到奇怪的結果,並且有時(完全)可以完全殺死R!

我使用odbcConnect連接到數據庫,並且嘗試了believe相信ows和rows_at_time沒有區別

>imcon<-odbcConnect(sid, uid=uid, pwd=pwd, believeNRows = FALSE, rows_at_time=1)

> odbcGetInfo(imcon)
       DBMS_Name         DBMS_Ver  Driver_ODBC_Ver Data_Source_Name      Driver_Name       Driver_Ver         ODBC_Ver      Server_Name 
        "Oracle"     "10.02.0030"          "03.51"       "SID"    "SQORA32.DLL"     "09.02.0000"     "03.52.0000"       "SID" 

然后,我嘗試一些查詢(如我所能做到的那樣簡單。此查詢返回零行(此表中有兩行),並且大多數列名都替換為An。

> sqlQuery(imcon, "select * from SCHEMA.USERS;")
 [1] PASSWORD                  USER_DISABLED             USE_DOMAIN_AUTHENTICATION ID                        DESCRIPTION              
 [6] ADMIN_USER                A                         A.1                       A.2                       A.3                      
[11] A.4                       A.5                       A.6                       A.7                       A.8                      
[16] A.9                       A.10                      A.11                      A.12                      A.13                     
[21] A.14                      A.15                      A.16                      A.17                      A.18                     
[26] A.19                      A.20                      A.21                      A.22                      A.23                     
[31] A.24                      A.25                      A.26                      A.27                      A.28                     
[36] A.29                      A.30                      A.31                      A.32                      A.33                     
<0 rows> (or 0-length row.names)
Warning messages:
1: In deparse(., width.cutoff = max(20, width - 10)) :
  invalid 'cutoff' for deparse, using default
2: In deparse(., width.cutoff = max(20, width - 10)) :
  invalid 'cutoff' for deparse, using default

此方法有效,但返回零行,並且兩個日期列被截斷為L和L.1。

> sqlQuery(imcon, "select ID, DESCRIPTION, NAME, FIRST_NAME, LAST_NAME, DATE_CREATED, DATE_LAST_MODIFIED from SCHEMA.USERS;")
[1] ID          DESCRIPTION NAME        FIRST_NAME  LAST_NAME   L           L.1        
<0 rows> (or 0-length row.names)

這工作正常,並返回數據

> sqlQuery(imcon, "select ID, DESCRIPTION, NAME, FIRST_NAME, LAST_NAME, ADMIN_USER from SCHEMA.USERS;")
  ID DESCRIPTION   NAME FIRST_NAME LAST_NAME ADMIN_USER
1  1        <NA> SYSTEM       <NA>        NA       TRUE
2  2  Admin user  ADMIN      Admin        NA       TRUE

老實說這似乎殺死了R

> sqlQuery(imcon, "select ID, DESCRIPTION, NAME, FIRST_NAME, LAST_NAME, DATE_CREATED from SCHEMA.USERS;")

R死了。 (都在StatEt和RGui中)

所以我的問題

a)有人知道出了什么問題嗎?

b)有人知道我可以采取哪些進一步的步驟來診斷嗎?

經過反復嘗試並試圖簡化我的問題,我注意到SQLPlus的輸出非常奇怪(列標題的下划線非常長)。 這導致我查看SQL Developer中的數據,該數據向我展示了列類(我確信SQLPlus也可以做到這一點)。 看起來大多數文本字段是varchar2(4000)或類似字符,日期字段是帶時區的datestamp。 似乎varchars阻止返回結果,而datestamps完全殺死R。

我修改了查詢,將這些列恢復為正常值,例如,對varchar2使用substr,對日期戳使用to_char;

select substr(t1.STATUS_DETAIL,0,24) as DETAIL,
to_char(t1.DATE_CREATED,'YYYY-MM-DD HH24:MI:SS') AS DCREATED 
from SCHEMA.TABLE;

阻止了R崩潰,並返回結果! 我將通過電子郵件將RODBC的軟件包維護者發送給其他人,並將此答案留給其他有此問題的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM