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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RODBC :: sqlSave()创建表,警告:在列中截断为255个字节?相关的知识,希望对你有一定的参考价值。

我正在使用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列,并且不想为每一列写出信息。

答案

使用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的值

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

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

以上是关于RODBC :: sqlSave()创建表,警告:在列中截断为255个字节?的主要内容,如果未能解决你的问题,请参考以下文章

RODBC sqlSave() 和映射列名

RODBC sqlSave 列类型:如何确定?

RODBC 错误:SqlSave 无法附加到表

RODBC sqlSave 崩溃 R 前端

当保存到 SQL Server 到 varchar(255) 时,RODBC::sqlsave() 会截断 DF 中的 col

来自 RODBC 的 sqlSave 仅在 R 中保存日期的年份