1

我需要一次向 oracle 表中插入一行。如果重复,由于PK设置,将不会插入。我需要拒绝将重复行插入到 db 表中。

我正在使用 RODBC 执行此操作,即使在晚上 7:00 之后表格上没有重复值,也无法在晚上 7:00 之后将记录插入到表格中。Dat 数据帧在 7PM 之前和 7PM 之后具有值。但是目标 oracle 表在晚上 7 点之后没有任何值。任何想法,我还能如何实现这一点以确保将值一次插入表中的一行?

tryCatch({

  ch=odbcConnect("<id>",pwd = "<password>")
  sqlSave(ch,dat, tablename="<tablename>", rownames=FALSE, append=TRUE, fast=FALSE)
  },error = function(e) {
    print(e)
  })
  odbcClose(ch)

我收到此错误:

<simpleError in sqlSave(ch, dat, tablename = "<tablename>", rownames = FALSE,     append = TRUE, fast = FALSE): un
able to append to table '<tablename'>
4

1 回答 1

0

我考虑过这个解决方案,但如果速度更快,我可以接受任何其他解决方案。

这就是我一次处理一条记录并插入数据库的方法。如果重复记录,该重复记录将被拒​​绝,R 将继续下一条记录:

for (k in 1:nrow(dat)) 
  {

    j<-dat[k,]

         tryCatch({

                  ch=odbcConnect("<id>",pwd = "<password>")
                  sqlSave(ch,j, tablename="<TableName>", rownames=FALSE, append=TRUE)
               },error = function(e) {
          print(e)
             })
}

 odbcClose(ch)
于 2013-04-24T18:33:24.230 回答