我能够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)
了lhs
和rhs
,以及number(10,4)
为其它列。
最后一点,我不知道您的循环有多大,但是最好禁用autocommit
(默认情况下为TRUE),
.jcall(con@jc, "Z", "getAutoCommit")
[1] TRUE
.jcall(con@jc, "V", "setAutoCommit", FALSE)
但是然后您需要在循环之外提交,
dbCommit(con)
希望能帮助到你。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句