如何将数据从 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)
我对发生的错误有点困惑。
有人可以帮助我吗?
由于某些原因,dbWriteTable
中 num
列中的 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.4
和 RJDBC_0.2-8
生成的注释。
我需要将数据从 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)
我对发生的错误有点困惑。
有人可以帮助我吗?
由于某些原因,dbWriteTable
中 num
列中的 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.4
和 RJDBC_0.2-8
生成的注释。