我使用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;
的锁定绑定值