2013-04-26 2 views
0

J'utilise RODBC pour insérer des trames de données dans la table Oracle. J'ai clé primaire mis en place sur la table et si un cadre de données en double arrive à l'oracle le rejettera. Afin de s'assurer que je ne manque pas de données, d'abord j'essaie d'insérer l'ensemble de la trame de données, si des erreurs, je vais essayer d'insérer chaque enregistrement à la fois. Mais quand j'essaie d'insérer chaque disque à la fois, cela prend beaucoup de temps. J'étais curieux, est-ce que quelqu'un a fait n'importe quel type de travail comme celui-ci et quelle était l'approche. Mon code est ci-dessous:Augmenter la vitesse d'insertion des trames de données dans les tables Oracle dans R en utilisant rodbc

tryCatch({ 

     ch=odbcConnect("<id>",pwd = "<password>") 
     sqlSave(ch,dat, tablename="<tablename>", rownames=FALSE, append=TRUE) 
     },error = function(e) 
     { 
      print("unable to insert the data frame, will try by each row") 
            ch=odbcConnect("<id>",pwd = "<password>") 

      for (k in 1:nrow(dat)) 
       { 
        j<-dat[k,] 
        tryCatch({ 
          sqlSave(ch,j, tablename="<tablename>", rownames=FALSE, append=TRUE) 
        },error = function(e) { 
         print("unable to insert, duplicate values") 
        }) 
       } 
       odbcClose(ch) 
     }) 
odbcClose(ch) 

Répondre

0

Déplacez odbcConnect hors de la boucle par enregistrement.

+0

je vous remercie pour le conseil. Je l'ai fait mais cela prend encore beaucoup de temps. J'ai modifié le message original. – user1471980

Questions connexes