我想在oracle数据库中的现有表中插入dataframe的内容。
sqlSave(conn, df[1:3,c(which(names(df) == "x"), which(names(df) == "y"), which(names(df) == "z")], tablename = "A_X", append = TRUE) 我得到了错误Error in odbcUpdate(channel, query, mydata, coldata[m, ], test = test, : missing columns in »data«,因为选中的列与表的列不匹配。
oracle表有比数据帧更多的列,因此不匹配的列应该使用NULL填充。我如何在R中实现这一点?我想在下面的SQL代码中包含df的内容如下:
INSERT INTO A_X
VALUES (df[1:3,c(which(names(df) == "x"), which(names(df) == "y"), which(names(df) == "z")], AUTO_ID, NULL, NULL);在Oracle SQL中,使用以下代码可以做到这一点:
INSERT INTO A_X
VALUES (300, 'text', 'text', AUTO_ID, NULL, NULL);第二个问题是自动生成ID AUTO_ID。我有Oracle DB 11.2.0.3版本,目前不可能更新到12c版本。
发布于 2017-04-25 13:44:54
这是另一种方法。
不只是使用sqlSave,而是使用来自RODBC的sqlSave & sqlQuery或来自DBI的dbExecute的组合。
然后,可以将df编写为永久表或临时表,然后用INSERT或UPDATE语句包装sqlQuery,以便对目标表和临时表进行操作。这并不是很优雅,但是应该为您提供一个可伸缩的解决方案,即使将来模式会发生变化。
https://stackoverflow.com/questions/43591313
复制相似问题