我已经搜索了高低的答案,如果已经回答了,我深表歉意!
使用 RI 正在尝试对 Oracle 11.1 数据库执行惰性评估。我使用 JDBC 来促进连接,我可以确认它工作正常。我还可以使用 dbGetQuery 查询表,尽管结果太大以至于我很快就会耗尽内存。
我已经尝试过 dbplyr/dplyr tbl(con, "ORACLE_TABLE") 虽然我收到以下错误:
Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ", :
Unable to retrieve JDBC result set for SELECT *
FROM "ORACLE_TABLE" AS "zzz39"
WHERE (0 = 1) (ORA-00933: SQL command not properly ended)
我也尝试过使用 db_table <- tbl(con, in_schema('ORACLE_TABLE'))
尽管能够执行常规 dbGetQuery,但我连接到的所有数据库都会发生这种情况。
完整代码:
# Libraries
library(odbc)
library(DBI)
library(config)
library(RJDBC)
library(dplyr)
library(tidyr)
library(magrittr)
library(stringr)
library(xlsx)
library(RSQLite)
library(dbplyr)
甲骨文连接
db <- config::get('db')
drv1 <- JDBC(driverClass=db$driverClass, classPath=db$classPath)
con_db <- dbConnect(drv1, db$connStr, db$orauser, db$orapw, trusted_connection = TRUE)
# Query (This one works but the data set is too large)
db_data <- dbSendQuery(con_db, "SELECT end_dte, reference, id_number FROM ORACLE_TABLE where end_dte > '01JAN2019'")
**# Query (this one wont work)**
oracle_table <- tbl(con_db, "ORACLE_TABLE")
解决了:
更新了 Rstudio + 包。
遵循本手册: https ://www.linkedin.com/pulse/connect-oracle-database-r-rjdbc-tianwei-zhang/
在“con”之后插入以下代码:
sql_translate_env.JDBCConnection <- dbplyr:::sql_translate_env.Oracle sql_select.JDBCConnection <- dbplyr:::sql_select.Oracle sql_subquery.JDBCConnection <- dbplyr:::sql_subquery.Oracle