如何将数据从 R 上传到 Oracle 数据库?

How to upload data into Oracle db from R?

我需要将数据从 R 上传到 Oracle 数据库。 我遵循这个问题的建议 .

我使用代码:

dbWriteTable(con_dwh, "table_db", table_in_R, 
         append =T, row.names=F, overwrite = F)

其中 con_dwh 是与 Oracle 数据库的 JDBC 连接。

然而我收到了错误信息:

Error in .local(conn, statement, ...) : 
execute JDBC update query failed in dbSendUpdate (NaN)

我对发生的错误有点困惑。

有人可以帮助我吗?

由于某些原因,dbWriteTablenum 列中的 NA 值无法作为 NULL 插入,这对 chr 列有效.

所以解决方法是用有效数字替换 num 列中的 NA - 我#m 使用 `0``。

如果您需要在 table 中以 null 结尾,请使用一些 特殊的 数字和 UPDATE 在数据库中为空。

> df <- data.frame(col1 = c('x',NA,'y'), col2 = c(1,NA,NA))
> 
> df
  col1 col2
1    x    1
2 <NA>   NA
3    y   NA
> str(df)
'data.frame':   3 obs. of  2 variables:
 $ col1: chr  "x" NA "y"
 $ col2: num  1 NA NA
> 
> dbWriteTable(jdbcConnection,"TEST", df,   rownames=FALSE, overwrite = TRUE, append = FALSE)  
Fehler in .local(conn, statement, ...) : 
  execute JDBC update query failed in dbSendUpdate (NaN)
> 
> df[is.na(df$col2),"col2"] <- 0
> df
  col1 col2
1    x    1
2 <NA>    0
3    y    0
> 
> dbWriteTable(jdbcConnection,"TEST", df,   rownames=FALSE, overwrite = TRUE, append = FALSE) 
> 

在数据库中

select * from test

COL1           COL2
-------- ----------
x                 1
                  0
y                 0

对于 integer 数据类型 int NA 的插入 works 但是插入的值是 -2147483648 这也不好。

df <- data.frame(  id  = c(as.integer(NA),as.integer(NA)) )
dbWriteTable(jdbcConnection,"TEST", df,   rownames=FALSE, overwrite = TRUE, append = FALSE) 

## OK but

select * from test

ID
-2147483648
-2147483648

这可能与NA作为整数的内部存储有关。

R version 4.0.4RJDBC_0.2-8 生成的注释。