R RODBC数据类型和DB2

时间:2015-03-05 15:51:27

标签: r db2 odbc rodbc

我使用RODBC连接到外部DB2服务器(' DB2 / AIX64'),并且它没有正确处理数据类型。它似乎是根据列内容进行猜测,而不是采用DB2使用的类型。当DB2服务器上存储了作为字符的列时,这会导致问题,但只包含数值。 有没有办法纠正RODBC中的这种行为?如果失败了,有没有办法以编程方式提取查询返回的DB2类型,那么我可以自动转换输出吗?

我可以使用as.is选项,但这几乎可以返回所有字符,所以我需要自己回去做转换。由于我工作的情况是我有几十个不同的查询,每次手动执行此操作是不可行的。

> library(RODBC)
> 
> sql_tst <- 'SELECT Tables.Tabschema,
>        Tables.Create_time,
>        Date (Tables.Create_time) AS Create_date,
>        Tables.Tableid,
>        Cols.Tbcreator,
>        Cols.Tbname,
>        Cols.Name,
>        Substr (Char (100 + Cols.Colno), 2, 2) AS Chr_colno   FROM    Sysibm.Syscolumns AS Cols
>        INNER JOIN
>           Syscat.Tables Tables
>        ON (Tables.Tabname = Cols.Tbname) AND
>           (Tables.Tabschema = Cols.Tbcreator) FETCH FIRST 100 ROWS ONLY   WITH UR'
> 
> channel <- odbcConnect(db, believeNRows=FALSE)
> 
> outtbl <- sqlQuery(channel, sql_tst)
> 
> close(channel)
> 
> str(outtbl)

请注意,Chr_colno在此示例中作为数字字段返回,而不是像它应该的字符字段。如果我使用&#34; as.is&#34;,则Create_time和Create_date将作为文本字段返回,而不是日期字段。

setSqlTypeInfo("DB2/AIX64", c(list(double="DOUBLE", integer="INTEGER", logical='VARCHAR(5)'), list(character="VARCHAR(255)")))

我使用setSqlTypeInfo进行了实验,但它返回了错误消息

  

&#34; typeR2DBMS [[driver]]&lt;&lt; - value [c(&#34; double&#34;,&#34; integer&#34;,&#34; character&#34; ,:     无法更改&#39; typesR2DBMS&#39;&#34;

的锁定绑定值

0 个答案:

没有答案