我试图通过运行以下命令从R通过ODBC将值插入到Oracle数据库中的现有表中,
conODBC<-odbcConnect(dsn="xxxx", uid="xxxxx", pwd="xxxx", readOnly=FALSE)
sqls<-sprintf("INSERT INTO R_AAAA (AAA,AAB,AAC,AAD) VALUES (%s)",
apply(R_AAAA, 1, function(i) paste(i, collapse=",")))
lapply(sqls, function(s) sqlQuery(conODBC, s))
我收到了这个错误,
“HY000 984 [Oracle] [ODBC] [Ora] ORA-00984:列在此处不允许\ n”
列在此处不允许是中文含义'此处不允许使用列'。变量sqls如下所示,
>sqls
"INSERT INTO R_AAAA (AAA,AAB,AAC,AAD) VALUES
(H3E000000000000,344200402050,12, 2.347826e+01)"
R_AAAA中的列AAA是字符串列。在我看来,Oracle数据库需要在引用语句中围绕字符串值'H3E000000000000'
使用单引号。谁知道如何添加单个标记?我想在现有表中插入行,而不是在Oracle中使用sqlSave创建新表。
由于
答案 0 :(得分:0)
您可以通过在调用代码
之前添加'到字符列来预处理R_AAAAR_AAAA <- data.frame(AAA="H3E000000000000", AAB=344200402050, AAC=12, AAD=2.347826e+01)
as.data.frame(lapply(R_AAAA, function(x) {
if (class(x) == "character") {
x <- paste0("'",x,"'")
}
x
}))
你为sqlSave做什么R包?应该有一个插入新行的选项,例如append=TRUE
。
答案 1 :(得分:0)
预处理工作。我用RODBC包。如果我在oracle数据库中创建一个空的R_AAAA并在R
中运行该命令 sqlSave(conODBC,R_AAAA,tablename="R_AAAA",append=TRUE)
R-studio崩溃。甚至没有错误信息:)