Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wstaw wiele wierszy z R Dataframe do bazy danych Oracle

Zakładając, że kolumny dataframe R są dokładnie tymi samymi kolumnami i w tej samej kolejności w Oracle (nie mniej lub bardziej), rozważ apply wkleić z zwiń wszystkie wartości w każdym wierszu:

sqls <- sprintf("INSERT INTO MYTABLE VALUES (%s)", 
                apply(df, 1, function(i) paste(i, collapse=",")))    
sqls
# [1] "INSERT INTO MYTABLE VALUES (2,10,9,50,34,37,29)" 
# [2] "INSERT INTO MYTABLE VALUES (7,24,33,21,21,20,3)" 
# [3] "INSERT INTO MYTABLE VALUES (39,38,2,33,43,33,7)" 
# [4] "INSERT INTO MYTABLE VALUES (30,11,33,1,29,26,11)"
# [5] "INSERT INTO MYTABLE VALUES (50,45,13,27,3,35,36)"
# [6] "INSERT INTO MYTABLE VALUES (41,5,39,17,5,22,5)"  
# [7] "INSERT INTO MYTABLE VALUES (21,50,39,30,2,11,49)"

# RECOMMENDED APPROACH TO SPECIFY COLUMNS
sqls <- sprintf("INSERT INTO MYTABLE (Col1, Col2, Col3, Col4, Col5, Col6, Col7) VALUES (%s)", 
                apply(df, 1, function(i) paste(i, collapse=",")))

connHandle <- odbcConnect("DBName", uid="user", pwd="password")
lapply(sqls, function(s) sqlQuery(connHandle, s))
close(connHandle)

A jeszcze lepszym podejściem jest użycie parametryzacji z RODBCext gdzie po prostu przekazujesz oryginalną ramkę danych bez pętli:

library(RODBCext)

connHandle <- odbcConnect("DBName", uid="user", pwd="password")
query <- "INSERT INTO MYTABLE (Col1, Col2, Col3, Col4, Col5, Col6, Col7) VALUES (?, ?, ?, ?, ?, ?, ?)"
sqlExecute(connHandle, query, df)

odbcClose(connHandle)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Java:wywoływanie procedury składowanej w bazie danych Oracle

  2. Rozmiar magazynu Oracle NUMBER(p)?

  3. Przekaż tablicę z Javy do Oracle:java.sql.SQLException:Niepowodzenie konwersji na reprezentację wewnętrzną:błąd

  4. Oracle zwraca stałą, gdy wynik jest pusty

  5. W Oracle, czy przydatne jest uruchamianie klauzuli WHERE zapytania SQL z 1=1?