毎日、外部サイトからデータを取得し、RODBC を使用してデータを Oracle テーブルにアップロードしています。単純なように思えますが、外部サイトから取得しているデータが重複している場合があります (つまり、Oracle テーブルに既に存在している可能性があるデータにいくつかの行がある可能性があります)。
私は現在、データをロードするためにこれを行っています:
insert<-function(x){
tryCatch({
x<-x[complete.cases(x),]
x<-unique(x)
x[, 3:5] <- sapply(x[, 3:5], as.character)
x[, 3:5] <- sapply(x[, 3:5], as.numeric)
ch=odbcConnect("<id>",pwd = "<passwd>")
sqlSave(ch,x, tablename="<tablename>", rownames=FALSE, append=TRUE)
print("insert of dat is successfull!!!!")
},error = function(e) {
print("insert failed!!!!")
print(odbcGetErrMsg(ch))
})
odbcClose(ch)
}
これをテストしたところ、データ フレームに oracle テーブルに挿入するエントリが重複している場合、sqlSave 全体が失敗することがわかりました。
sqlSave コマンド全体が失敗した場合は、一度に 1 行ずつ挿入を試みることができますが、完了するまでに時間がかかります。スクリプトは決して追いつきません。
sqlSave のオプションや、重複したレコードを無視して他のすべてを sqlSave で挿入するオプションがあるかどうかを知りたいと思っていました。どんな洞察も大歓迎です。