所以,我使用R中的RODBC包来编写和读取我的数据库,这就是:
让我们使用mtcars作为示例
我将mtcars保存到我的数据库:
sqlSave(con, mtcars, "MTCARS",rownames = F)
然后我读了我刚刚保存的内容:
sqlQuery(con,"select * from MTCARS")
完美!它有效...现在让我们试试这个:
sqlQuery(con,"select mpg from MTCARS")
[1] "42S22 904 [Oracle][ODBC][Ora]ORA-00904: \"MPG\": invalid identifier\n"
[2] "[RODBC] ERROR: Could not SQLExecDirect 'select mpg from MTCARS'"
所以我检查了数据库,并用引号保存了列名!因此,为了我的查询工作,我必须这样做:
sqlQuery(con,"select \"mpg\" from MTCARS")
为什么呢?我该如何解决这个问题?
答案 0 :(得分:1)
Oracle通常只使用大写列名。在进程的某个时刻,数据框列名被引用,因为它意识到它们不是大写的。我不确定这是否发生在RODBC,驱动程序或数据库本身。
在任何情况下,首先将列名转换为大写似乎可以解决问题。