我正在使用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列,并且不想为每一列写出信息。
答案 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;)的最简单方法是