我们正在使用odbc连接来连接目标数据库(oracle数据库),我们需要将数据帧插入目标数据库。我们正在使用dbBind()将数据帧插入数据库。请找到下面提到的示例数据和代码。
Dataframe: Inputdata
column1 column2 column3 date_column column4
<chr> <chr> <chr> <chr> <chr>
1 1111 6 fff 2015-11-01 MCA
2 2222 1 aaa 2006-12-02 NA
3 3333 2 bbb 2007-10-03 NA
4 4444 3 ccc 2008-01-04 NA
5 555 4 ddd 2007-11-05 NA
6 6666 5 eee 2010-11-06 BCH
R script :
Target1Conn<-dbConnect(odbc::odbc(), dsn = "TARGETDB", uid = "username", pwd = "password")
insert <- dbSendQuery(Target1Conn, paste0('insert into ', outputTableName, '(column1,column2,column3,date_column,column4) values(?,?,?,?,?)'))
dbBind(insert, list(InputData$column1,InputData$column2,InputData$column3,InputData$date_column,InputData$column4))"
Error:
Error in result_bind(res@ptr, as.list(params), batch_rows) :
nanodbc/nanodbc.cpp:1617: 00000: [Oracle][ODBC][Ora]ORA-01861: literal does not match format string
我的DataFrame有130万条记录,并且在插入1024条记录后使用上述方法,脚本因上述错误而失败。
如果忽略日期列并插入数据,则可以将数据插入数据库而没有任何问题。如果有其他解决方案,请告知我们。
尝试
library(tidyverse)
library(lubridate)
df <- df %>%
mutate(date_column = ymd(date_column))
然后再次运行您的代码。