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

标签 r database oracle odbc rodbc

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

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

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

…truncated to 255 bytes in column…

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

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

最佳答案

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

通过在运行 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 的值

关于RODBC::sqlSave() 创建表,警告:列中被截断为 255 字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45224631/

相关文章:

iphone - 预加载的 "Core data"数据库在更新数据库后未显示正确的新数据

sql - 在 oracle SQL 中打印连续或重叠日期范围的开始和结束日期

Oracle:动态设置表中的所有 NOT NULL 列以允许 NULL

r - Ryacas 的符号矩阵乘法

r - 如何使用dplyr查找R数据框中两行中的值之间的差异

r - 有没有一种方法可以通过编程使给定RGB值的颜色变暗?

sql - 通过匹配词比较字符串

java - 通过链接到数据库的id从表中删除多个记录

r - 按条件 (>) 计算每行的列数

sql - 处理递归 cte 中的大量列