使用循环将数据写入R中的oracle数据库

pcpcne

我能够r在数据库中进行市场分析我已经完成分析,我想将结果逐行写入oracle数据库。我已经试过了

sonuclar<-inspect(basket_rules[1:5])
mode(sonuclar)
[1] "list"
class(sonuclar)
[1] "data.frame"
for(row in 1:nrow(sonuclar)) {`dbGetQuery(jdbcConnection,paste0("insert into market_basket_analysis (lhs,rhs,support,confidence,lift)
values ('",sonuclar$lhs[row],"','",sonuclar$rhs[row],"','",sonuclar$support[row],"','",sonuclar$confidence[row],"','",sonuclar$lift[row],"')"))}`

但是它只写一行,它不适用于其他循环迭代步骤,并且返回错误消息:

`Error in .verify.JDBC.result(md, "Unable to retrieve JDBC result set meta data for ",  : 
  Unable to retrieve JDBC result set meta data for insert into market_basket_analysis (lhs,rhs,support,confidence,lift) values ('{SPRITE GAZOZ1,5L}','{COCACOLA # 1,5LT}','0.00395004588437138','0.439024390243902','1.99010097534508') in dbSendQuery (ORA-00900: invalid SQL statement
)`

即使出现错误,它也会插入

{SPRITE GAZOZ1,5L},{COCACOLA # 1,5LT},'0.00395043993535644','0.439024390243902','1.98990246549237' 

这是第一行。

尽管我已经搜索了一个多星期了很多,但在互联网上我并没有找到有意义的信息; 有解决此错误的任何想法。提前致谢。

伦茨奇格

对我来说,它不起作用也令人感到有些惊讶,但是,是的,实际上,使用您提供的代码来复制它相当容易。直到现在,每当我不得不做我曾经使用过的类似事情时dbWriteTable,我想知道你是否由于某种原因而不能这样做。

无论如何,如果确实需要或要插入循环中,则应使用绑定变量。您的循环看起来像这样,

for(row in 1:nrow(sonuclar)) {
 inss <-  paste0("insert into temp (lhs,rhs,support,confidence,lift) values (?, ?, ?, ?, ?)")
 dbSendUpdate(con, inss, list=as.list(sonuclar[row, ]))
}

(请注意,我的连接被调用con,并且table被调用temp,而不是您的名字...)仅供参考,我已经像这样定义了data.frame,

sonuclar <- data.frame(matrix(c('{SPRITE GAZOZ1,5L}','{COCACOLA # 1,5LT}',0.00395004588437138,0.439024390243902,1.99010097534508,
                                '{SPRITE GAZOZ1,5L}','{COCACOLA # 1,5LT}',0.00395043993535644,0.439024390243902,1.98990246549237),
                              nrow=2, ncol=5, byrow=TRUE))
colnames(sonuclar) <- c('lhs','rhs','support','confidence','lift')

并在表中我使用varchar(20)lhsrhs,以及number(10,4)为其它列。

最后一点,我不知道您的循环有多大,但是最好禁用autocommit(默认情况下为TRUE),

.jcall(con@jc, "Z", "getAutoCommit")
[1] TRUE
.jcall(con@jc, "V", "setAutoCommit", FALSE)

但是然后您需要在循环之外提交,

dbCommit(con)

希望能帮助到你。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章