1

我有许多脚本可以通过 Windows XP 上的 ODBC 从 Oracle 10g 数据库中提取数据,这些脚本已经运行了很长时间。我最近设置了一个新的 Oracle 帐户以从同一数据库的另一个模式中提取数据,但是当我使用该帐户和不同的模式进行测试时,我得到了奇怪的结果,并且有时可以(可靠地)完全杀死 R!

我使用 odbcConnect 连接到数据库,并且尝试过相信NRows 和 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) 有谁知道我还可以采取哪些步骤来诊断?

4

1 回答 1

1

经过一番尝试并试图简化我的问题后,我注意到 SQLPlus 的输出非常奇怪(列标题的下划线非常非常长)。这导致我查看 SQL Developer 中的数据,它向我展示了列类(我确信 SQLPlus 也可以这样做)。看起来大多数文本字段都是 varchar2(4000) 或类似的,日期字段是带有时区的日期戳。似乎 varchars 阻止了返回结果,并且日期戳完全杀死了 R。

例如,我修改了我的查询,通过对 varchar2 使用 substr 和对 datestamp 使用 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 的包维护者发送电子邮件,并将此答案留给遇到此问题的任何其他人。

于 2013-02-27T23:15:24.657 回答