使类型和精度明确化并不优雅,但可能是很好的编程。我是这样做的:
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甲骨文表。