1

我正在尝试使用 ROracle 包将表写入 Oracle 数据库。这工作正常,但是所有数值都在数据库上显示完整的浮点十进制表示。例如,7581.24 显示为 7581.2399999999998。

有没有办法在写表时指定小数点后要存储的位数?

我在这里找到了使用Allan 解决方案的解决方法,但最好不要在将变量写入数据库后更改它。

目前我用这样的代码编写表格:

dbWriteTable(db_connection, "TABLE_NAME", table, overwrite = TRUE)

提前致谢。

4

1 回答 1

0

使类型和精度明确化并不优雅,但可能是很好的编程。我是这样做的:

if (dbExistsTable(con, "TABLE_NAME")) dbRemoveTable(con, "TABLE_NAME")
create_table <- "create table CAMS_CFDETT_2019_AA(
ID VARCHAR2(100),
VALUE NUMBER(6,2)
)"

dbGetQuery(con_maps, create_table)

ins_str <- "insert into TABLE_NAME values(:1, :2)"

dbGetQuery(con, ins_str, df)
dbCommit(con)

本质上,它创建表并指定每列的类型和精度。然后它用 R 中数据框 ( ) 中的值填充值df。您只需要注意所有内容都与列匹配。如果您为 oracle 分配一个精度为 2 ( 的数字VALUE NUMBER(3,2),然后从 R 中推送一个具有更多小数的值,它会将其四舍五入到分配的精度(在本例中为 2)。它不会截断它。所以在df$value = 3.1415R 中将变为VALUE 3.14甲骨文表。

于 2021-09-20T17:13:21.870 回答