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
时,它说varchar2
的COLUMN_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个字节?的主要内容,如果未能解决你的问题,请参考以下文章
当保存到 SQL Server 到 varchar(255) 时,RODBC::sqlsave() 会截断 DF 中的 col