使用R创建ODBC表后无法访问的问题求助
解决R写入ODBC表后无法查询的问题
我来帮你搞定这个头疼的问题!这种情况大概率是表的归属模式(schema)不匹配或者连接默认设置没对齐导致的,咱们一步步来排查解决:
1. 先确认表的完整访问路径
你提到表显示在「个人模式」下,这说明R写入的表是挂在你当前数据库用户对应的私有schema里的,而你查询的时候可能默认用的是公共schema(比如PUBLIC)或者其他schema,自然找不到表。
- 先查一下你的当前用户schema:
-- Oracle 示例 SELECT USER FROM DUAL; -- DB2 示例 SELECT CURRENT_SCHEMA FROM SYSIBM.SYSDUMMY1; -- SQL Server 示例 SELECT SCHEMA_NAME(); - 然后查询的时候必须带上完整的schema+表名,比如你的用户是
ANDRE,表是TEST_DATA,就要写:SELECT * FROM ANDRE.TEST_DATA;
2. 让R直接写入到可访问的schema
与其每次查询都加前缀,不如直接让R把表写到你常用的schema里:
- 用
DBI的dbWriteTable时,直接指定schema参数:# 比如写入到PUBLIC schema dbWriteTable( conn = your_odbc_conn, name = c("PUBLIC", "TEST_DATA"), value = your_dataframe, overwrite = TRUE, row.names = FALSE ) - 用
RODBC的sqlSave时,把schema加到表名里:sqlSave( channel = your_odbc_channel, dat = your_dataframe, tablename = "PUBLIC.TEST_DATA", rownames = FALSE, overwrite = TRUE )
3. 调整ODBC连接的默认schema
如果不想每次写代码都指定schema,可以修改ODBC数据源的默认设置:
- 打开系统的「ODBC数据源管理器」(Windows在控制面板,Mac/Linux用对应的ODBC配置工具)
- 找到你正在使用的DSN,进入配置界面,找到「默认schema」或者「当前schema」的选项
- 把它设置成你需要的schema(比如
PUBLIC或者你的用户schema),保存后重新连接
4. 验证表的查询权限
虽然你说能通过SQL Developer修改删除,但还是可以确认一下表的查询权限是否开放:
-- 给所有用户开放查询权限(示例) GRANT SELECT ON TEST_DATA TO PUBLIC; -- 或者给特定用户 GRANT SELECT ON TEST_DATA TO YOUR_USERNAME;
按照上面的步骤操作后,应该就能正常查询R写入的ODBC表了!
内容的提问来源于stack exchange,提问作者André Oviedo
相关产品推荐
相关产品推荐

