Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Chèn nhiều hàng từ Khung dữ liệu R vào Cơ sở dữ liệu Oracle

Giả sử các cột khung dữ liệu R là các cột hoàn toàn giống nhau và theo cùng một thứ tự trong Oracle (không nhiều hơn hoặc ít hơn), hãy xem xét áp dụng để dán với sụp đổ tất cả các giá trị trong mỗi hàng:

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)

Và cách tiếp cận tốt hơn nữa là sử dụng tham số hóa với RODBCext nơi bạn chỉ cần chuyển vào khung dữ liệu ban đầu mà không có vòng lặp:

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. Oracle APEX - SQL - Tạo lịch sử tuần tự và tính toán số ngày giữa mỗi giai đoạn

  2. Gọi các thủ tục được lưu trữ của Oracle với MyBatis

  3. SQL kết nối cho nhiều hàng

  4. Trong MySQL có bất kỳ chức năng nào giống như cấp trong Oracle không

  5. SQL Server tương đương với Oracle DBMS_METADATA.GET_DDL?