R 中的 RODBC 包使用引号创建列名......为啥?
Posted
技术标签:
【中文标题】R 中的 RODBC 包使用引号创建列名......为啥?【英文标题】:RODBC package in R creates column names with quotes... why?R 中的 RODBC 包使用引号创建列名......为什么? 【发布时间】:2015-08-06 17:23:49 【问题描述】:所以,我使用 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")
为什么?我该如何解决这个问题?
【问题讨论】:
只是猜测:如果在调用sqlSave
之前将mtcars
中的所有列名转换为大写会发生什么?
你猜对了!!太棒了:)
【参考方案1】:
Oracle 通常只使用大写的列名。在过程中的某个时刻,数据框列名被引用,因为它意识到它们不是大写的。我不确定这是否发生在 RODBC、驱动程序或数据库本身中。
无论如何,首先将列名转换为大写似乎可以解决问题。
【讨论】:
也适用于 Postgres。以上是关于R 中的 RODBC 包使用引号创建列名......为啥?的主要内容,如果未能解决你的问题,请参考以下文章
使用 MAC 10.11.6 在 R 中安装 RODBC 包