1

一度に 1 行ずつ Oracle テーブルに行を挿入する必要があります。PK の設定により、重複する場合は挿入されません。db テーブルへの重複行の挿入を拒否する必要があります。

私は RODBC を使用してこれを行っていますが、午後 7 時以降はテーブルに重複する値がなく、午後 7 時以降はテーブルにレコードを挿入できません。データ フレームには、7PM より前と 7PM より後の値があります。しかし、午後 7 時以降、宛先 oracle テーブルには値がありません。一度に1行ずつ値がテーブルに挿入されるようにするために、他にどのように実装できますか?

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

私はこの解決策について考えましたが、より速い場合は他の解決策を受け入れます。

これは、一度に 1 つのレコードを処理し、データベースに挿入する方法です。レコードが重複している場合、その重複レコードは拒否され、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 に答える