R 中的 RODBC 包创建带引号的列名......为什么?
RODBC package in R creates column names with quotes... why?
所以,我在 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")
为什么?我该如何解决这个问题?
Oracle 通常只使用大写的列名。在这个过程中的某个时刻,数据框列名被引用,因为它意识到它们不是大写的。我不确定这是否发生在 RODBC、驱动程序或数据库本身中。
无论如何,先将列名转换为大写似乎可以解决问题。
所以,我在 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")
为什么?我该如何解决这个问题?
Oracle 通常只使用大写的列名。在这个过程中的某个时刻,数据框列名被引用,因为它意识到它们不是大写的。我不确定这是否发生在 RODBC、驱动程序或数据库本身中。
无论如何,先将列名转换为大写似乎可以解决问题。