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

问题描述 投票:1回答:2

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

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

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

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

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

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

r database oracle odbc rodbc
2个回答
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的值


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

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

© www.soinside.com 2019 - 2024. All rights reserved.