sql >> データベース >  >> RDS >> Oracle

RデータフレームからOracleデータベースに複数の行を挿入します

    Rデータフレーム列がOracleでまったく同じ列であり、同じ順序であると仮定すると(多かれ少なかれ)、 applyを検討してください。 貼り付け 折りたたみ 各行のすべての値:

    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)
    

    さらに優れたアプローチは、 RODBCext ループなしで元のデータフレームを渡すだけです:

    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. MS AccessでIDEを最新化するのを手伝ってください–あなたの投票が重要です!

    2. MySQL高可用性フレームワークの説明–パートI:はじめに

    3. Postgres接続を取得するためにHibernateが遅い

    4. SQLステートメントを使用してMySQLテーブルの名前を変更します