RODBC :: sqlSave()创建表,警告:在列中截断为255个字节?

时间:2017-07-20 20:30:00

标签: r database oracle odbc rodbc

我正在使用RODBC尝试将新表(本地数据帧)写入Oracle数据库。我正在处理的问题是许多字段是字符变量,长度超过255个字符。我根据RODBC小插图运行此代码来初始化表:

sqlSave(channel=conn, dat=SCHEMA.TABLE_NAME)

conn是使用odbcConnect设置的R对象,SCHEMA.TABLE_NAME是本地数据框的名称。 R返回了警告信息,所有人都说了

  

...在列中截断为255个字节...

RODBC小插图提到许多系统默认为字符的varchar(255)。但是,当我在sqlTypeInfo()对象上调用conn时,它会说varchar2的{​​{1}}为4000。

如何在不截断字符串的情况下将此数据框作为表写入数据库?我相信我可以使用COLUMN_SIZE编写SQL查询来手动创建此表,但我有大约175列,并且不想为每一列写出信息。

2 个答案:

答案 0 :(得分:1)

使用RODBC中的sqlSave函数将数据帧写入sql server db时遇到了同样的问题。

通过在运行sqlSave命令之前设置列类型以获取更多数据来解决此问题。我使用了varchar(500)并且它完成了诀窍。

如果您使用包含长字符串的单个列从R创建表,这对我有用:

    sqlQuery<-c('CREATE TABLE YourTable (ColumnName varchar(500));')
    channel <- odbcConnect("YourTable")
    sqlQuery(channel, paste(sqlQuery))
    close(channel) 

之后使用sqlSave写入该表应该可以工作:

    sqlSave(odbcConnect("YourTable"),dataFrame,append=TRUE)

如果仍然收到截断警告,请尝试将varchar值设置为大于500

的值

答案 1 :(得分:0)

sqlsave(channel=conn, dat=SCHEMA.TABLE_NAME, varTypes=c(column_name="varchar(500)"))

虽然我不确定获取所有相关列的c(column_name =&#34; varchar(500)&#34;)的最简单方法是