我正试图使用ROracle包将表写入Oracle数据库。这很好,但是所有的数值都显示了数据库中的完整浮点小数表示形式。例如,7581.24显示为7581.23999999999998。
写表格时,有没有办法指定小数点后要存储的位数?
我在这里找到了一个使用Allan解决方案的方法,但最好不要在将变量写入数据库后更改它。
目前我用这样的代码写表格:
dbWriteTable(db_connection, "TABLE_NAME", table, overwrite = TRUE)
提前谢谢。
明确类型和精度并不优雅,但可能是很好的编程。我用这样的东西做了:
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
(中的值填充这些值。您只需要小心,所有的值在列方面都匹配。如果将一个精度为2(VALUE NUMBER(3,2)
(的数字分配给oracle,然后从R推送一个具有更多小数的值,它将四舍五入到指定的精度(本例中为2(。它不会截断它。所以R中的df$value = 3.1415
将变成Oracle表中的VALUE 3.14
。