R 数据帧到 Oracle SQL 表:无法分配内存

Posted

技术标签:

【中文标题】R 数据帧到 Oracle SQL 表:无法分配内存【英文标题】:R data frame to Oracle SQL table: Could not allocate memory 【发布时间】:2017-04-25 14:23:05 【问题描述】:

我想使用以下代码将 R 中的数据框插入到我的 Oracle 数据库中的现有表中:

sqlSave(connection, df, tablename = "oracle_table", append = TRUE)

我收到错误 could not allocate memory。 我尝试只插入一行,但错误仍然出现。 Oracle 目标表中部分字段的类型为memo

如何在 oracle 表中插入我的 df?

R 数据框的结构:

$a: num
$b: chr

Oracle数据库中目标表的结构:

a: number(10,0)
b: CLOB

示例数据集:

b <- c("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua","Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua At vero eos et accusam et justo duo dolores et ea rebum"," Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet"," Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua"," At vero eos et accusam et justo duo dolores et ea rebum Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua"," Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet"," Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua", " Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua","Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi"," Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat")
df <- data.frame(A = seq(1:length(b)), B = b, C = tolower(gsub("[[:space:]]|[[:punct:]]", "", b)))
sqlSave(connection, df, tablename = "ORACLE_TABLE", append = TRUE)

在不先创建 Oracle 表的情况下将整个 df 保存为我的 Oracle 数据库中的表会更容易吗?我怎么能在 R 中做到这一点?

【问题讨论】:

【参考方案1】:

我刚刚发现如何使用 ROracle 将 R 中的数据框放入 Oracle 的数据库中:

require(ROracle)
Con=dbConnect(dbDriver("Oracle"),"IP/SID",username="xxx",password="xxx")
dbWriteTable(Con, "ORACLE_TABLE", df, row.names = TRUE, overwrite = TRUE)

这是一个折中的解决方案,但至少我现在已经将我的 df “插入”到了数据库中。

【讨论】:

如果您不想覆盖现有记录,也可以使用append = TRUE

以上是关于R 数据帧到 Oracle SQL 表:无法分配内存的主要内容,如果未能解决你的问题,请参考以下文章

递归sql级别1出现错误

Oracle 查询局域网内其他电脑上的Oracle数据库表

10046确认多块读无法跨区

Oracle DBA日常维护SQL脚本

UTF-8编码熊猫数据帧到MySQL

Oracle SQL 或 PLSQL 随负载扩展