R将字符串列插入Oracle数据库

时间:2018-01-24 07:09:35

标签: r string oracle odbc

我试图通过运行以下命令从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创建新表。

由于

2 个答案:

答案 0 :(得分:0)

您可以通过在调用代码

之前添加'到字符列来预处理R_AAAA
R_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崩溃。甚至没有错误信息:)