偶尔连接到我的Oracle
数据库时ROracle
,dbplyr
我将运行一个取得dplyr::collect
比预期更多的数据的操作,而不是R可以处理.
这可能会导致R崩溃,并且通常是我应该在获取之前进一步过滤或聚合数据的标志.
能够在选择是否获取结果之前检查结果的大小(不运行查询两次)会很棒.
让我们来命名它collect2
的变化,collect
这样就可以了:
预期行为:
small_t <- con %>% tbl("small_table") %>%
filter_group_etc %>%
collect2(n_max = 5e6) # works fine
big_t <- con %>% tbl("big_table") %>%
filter_group_etc %>%
collect2(n_max = 5e6) # Error: query returned 15.486.245 rows, n_max set to 5.000.000
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我也对使用ROracle
/ DBI
不使用的解决方案持开放态度dplyr
,例如:
dbGetQuery2(con, my_big_sql_query,n_max = 5e6) # Error: query returned 15.486.245 rows, n_max set to 5.000.000
Run Code Online (Sandbox Code Playgroud)
编辑:
请参阅下面作为答案发布的部分解决方案,不是最佳的,因为浪费了一些时间来获取我没有用的数据.
我正在尝试安装ROracle包,install.packages("ROracle")
但每次我收到此消息"Package which is only available in source form, and may need compilation of C/C++/Fortran: ‘ROracle’"
These will not be installed
Run Code Online (Sandbox Code Playgroud)
我无法找到解决方案,我该如何解决这个问题?
我无法通过ROracle在R中执行/调用Oracle过程.我已经尝试了许多不同的方法来调用该过程,并且我一直遇到相同的错误.我在执行SELECT查询时没有问题但是调用过程很困难.我已经使用了oracleProc和dbSendQuery函数,但无济于事.它们都不起作用.对于调用过程的例子,Roracle文档很可怜.
假设Oracle程序在MYSCHEMA中称为MYPROC.使用NO参数的过程非常简单(它涉及读取几个表并写入表)
当我直接在Oracle Developer中执行该过程时,没有问题:
以下适用于Oracle Developer(但不适用于R)
EXEC MYSCHEMA.MYPROC;
Run Code Online (Sandbox Code Playgroud)
然后我尝试从R(通过ROracle)调用相同的过程并给我错误.我尝试了许多不同的方法来调用程序,我得到了同样的错误:
# This didn't work in R
> require(ROracle)
> LOAD_query <- oracleProc(con1, "BEGIN EXEC MYSCHEMA.MYPROC; END;")
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
.oci.oracleProc中的错误(conn,statement,data = data,prefetch = prefetch,:
# Then i tried the following and it still didn't work
> LOAD_query <- oracleProc(con1, "EXEC MYSCHEMA.MYPROC;")
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误(与上面的错误有点不同):
.oci.oracleProc中的错误(conn,statement,data = data,prefetch = prefetch,:ORA-00900:无效的SQL语句
# so then i tried dbSendQuery which works perfectly fine with any SELECT statements but it didn't work
> LOAD_query <- dbSendQuery(con1, "BEGIN EXEC MYSCHEMA.MYPROC; END;") …
Run Code Online (Sandbox Code Playgroud) 在Oracle DB中:
DESCRIBE ORACLE_DB_TABLE;
|---------------------------------------|
| Column Name | Data Type |
|---------------------------------------|
| TRANSACTION_TIME | DATE |
| TRANSACTION_ID | VARCHAR2 (20 Byte) |
| TRANSACTION_AMT | NUMBER (38,10)] |
|---------------------------------------|
Run Code Online (Sandbox Code Playgroud)
在R:
> r_data_table
TRANSACTION_TIME TRANSACTION_ID TRANSACTION_AMT
1: 2015-04-28 11:12:24 ABC 123
> dbWriteTable(conn, "ORACLE_DB_TABLE", r_data_table, overwrite = F, append = T, row.names = F)
> Error in .oci.WriteTable(conn, name, value, row.names = row.names, overwrite = overwrite, :
Error in .oci.ValidateZoneInEnv(FALSE) :
environment variable 'ORA_SDTZ()' must be set to …
Run Code Online (Sandbox Code Playgroud) 我知道关于这个问题的其他问题,但它们与我的系统设置或我得到的安装错误没有多少共同之处,所以:
我使用的是Windows 7,64位
我已经安装了64位Oracle Instant Client 18.3.0.0.0及其sdk和odbc扩展,可从http://www.oracle.com/technetwork/topics/winx64soft-089540.html获得.
我把安装位置`C:\ Oracle\instantclient_18_3'放在PATH上.
我安装了R 3.5.1和Rtools 3.5; 两者都在PATH上.
在R中,
Sys.setenv(
'ORACLE_HOME' = 'C:/Oracle/instantclient_18_3',
'OCI_INC' = 'C:/Oracle/instantclient_18_3/sdk/include',
'OCI_LIB64' = 'C:/Oracle/instantclient_18_3'
)
install.packages("ROracle", type="source")
Run Code Online (Sandbox Code Playgroud)
结果如下
* installing *source* package 'ROracle' ...
** package 'ROracle' successfully unpacked and MD5 sums checked
Oracle Client Shared Library 64-bit - 18.3.0.0.0 Operating in Instant Client mode.
found Oracle Client C:/Oracle/instantclient_18_3
found Oracle Client include C:/Oracle/instantclient_18_3/sdk/include
copying from C:/Oracle/instantclient_18_3/sdk/include
** libs
c:/Rtools/mingw_64/bin/gcc -I"C:/Program Files/R/R-3.5.1/include" -DNDEBUG -I./oci -O2 -Wall -std=gnu99 …
Run Code Online (Sandbox Code Playgroud) 如何使用将带有日期列的数据框写入 Oracle 数据库dbWriteTable
?我在尝试:
df <-read.table(header = TRUE, sep = ',', stringsAsFactors = FALSE,
text="
id,product,origination_date,repayment_date
1,A,2012-01-01,2012-02-01
2,A,2012-01-01,2012-04-01
3,A,2012-01-01,NA
4,A,2012-02-01,2012-03-01
")
df$origination_date <- as.Date(df$origination_date, format = '%Y-%d-%m')
df$repayment_date <- as.Date(df$repayment_date, format = '%Y-%d-%m')
names(df) <- toupper(names(df))
dbWriteTable(oraCon, 'TMP', df)
Run Code Online (Sandbox Code Playgroud)
这是数据库中的结果:
1 A 31-DEC-11 11.00.00.000000 PM 01-JAN-12 11.00.00.000000 PM
2 A 31-DEC-11 11.00.00.000000 PM 03-JAN-12 11.00.00.000000 PM
3 A 31-DEC-11 11.00.00.000000 PM
4 A 01-JAN-12 11.00.00.000000 PM 02-JAN-12 11.00.00.000000 PM
Run Code Online (Sandbox Code Playgroud)
我也许可以理解我最终得到的是时间戳而不是日期,但无法理解为什么会有31-DEC-11
我想要的地方01-JAN-12
。
R的包"rOracle"读取db的西里尔数据时遇到了一些麻烦.我将oracle的nls_lang选项更改为AMERICAN_AMERICA.CL8MSWIN1251,以便rODBC包中的sqlQuery可以正常使用选项DBMSencoding ="CP1251",但我不知道如何使用rOracle的dbGetQuery指定要读取的编码.
有任何想法吗?
得到以下错误:
图书馆('ROracle')
inDL(x, as.logical(local), as.logical(now), ...) 中的错误:无法加载共享对象 'C:/Users/Daniel/R/winlibrary/3.2/ROracle/libs/x64/ ROracle.dll': LoadLibrary 失败: %1 不是有效的 Win32 应用程序。
library('ROracle')
Error in inDL(x, as.logical(local), as.logical(now), ...) :
unable to load shared object 'C:/Users/Daniel/R/winlibrary/3.2/ROracle/libs/x64/ROracle.dll':
LoadLibrary failure: %1 is not a valid Win32 application.
Run Code Online (Sandbox Code Playgroud)
我不知道从哪里开始解决这个问题。这是 libPath() 的结果
> .libPaths()
"C:/Users/Daniel/R/win-library/3.2" "C:/Program Files/R/R-3.2.3/library"
Run Code Online (Sandbox Code Playgroud)
Windows 10,R 版本 3.2.3
有没有办法在 rstudioapi::askForPassword 弹出窗口中禁用屏蔽,以便用户可以输入他们的用户名?
我正在构建一个可以与我的团队共享的函数,用于使用 ROracle pacakge 连接到我们的 Oracle 数据库实例
目前的解决方案,
connection <- dbConnect(
driver
, username = rstudioapi::askForPassword(prompt = 'Please enter username: ')
, password = rstudioapi::askForPassword(prompt = 'Password: ')
, dbname = 'my.connection.string'
)
Run Code Online (Sandbox Code Playgroud)
这会弹出以下提示:( 链接中的图片)
这是使用 Rstudio api的 RStudio数据库文档中描述的解决方案
想资助一个不屏蔽密码但弹出相同提示的解决方案(如果可能,一行不错的代码......)
我已经从 Oracle 网站下载了编译好的 ROracle 包。我已经设置了我的工作目录setwd()
。然后我尝试按如下方式安装软件包:
install.packages("ROracle-1.3.2.zip", repos=NULL)
Run Code Online (Sandbox Code Playgroud)
它失败了,我收到以下错误消息:
Error in read.dcf(file.path(pkgname, "DESCRIPTION"), c("Package", "Type")) :
cannot open the connection
In addition: Warning message:
In read.dcf(file.path(pkgname, "DESCRIPTION"), c("Package", "Type")) :
cannot open compressed file 'ROracle-1.3.2/DESCRIPTION', probable reason 'No such file or directory'
Run Code Online (Sandbox Code Playgroud)
为了以防万一,我也从命令行尝试过:
R CMD INSTALL ROracle-1.3.2.zip
Run Code Online (Sandbox Code Playgroud)
它也失败了,我收到以下错误消息:
* installing to library 'Z:/R/R-3.6.1/library'
Warning in read.dcf(file.path(pkgname, "DESCRIPTION"), c("Package", "Type")) :
cannot open compressed file 'ROracle-1.3.2/DESCRIPTION', probable reason 'No such file or directory'
Error in read.dcf(file.path(pkgname, "DESCRIPTION"), c("Package", "Type")) : …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在unix盒子上安装ROracle包.包正确安装.但是库(ROracle)对错误不起作用
library(ROracle)
Error in dyn.load(file, DLLpath = DLLpath, ...) :
unable to load shared object '/u01/group1/home/oracle/R/x86_64-redhat-linux-gnu-library/3.1/ROracle/libs/ROracle.so':
libclntsh.so.11.1: cannot open shared object file: No such file or directory
Error: package or namespace load failed for ‘ROracle’
Run Code Online (Sandbox Code Playgroud)
该软件包从命令行安装正常,但在R studio中无法正常工作.我在论坛中经历了很多线程,很多人建议导出LD_LIBRARY_PATH并重置它.事实上我继续将所有R系统变量从命令行复制到R Studio中.但它仍然没有成功.
我还注意到的一件事是每次重启R studio时R系统变量都会发生变化.可能是R studio没有正确获取路径值的问题.
我正在使用ROracle从R连接到Oracle数据库。问题是,对于每个特殊的utf-8字符,它都会返回一个问号。一些中文值会返回一连串的问号。我认为这是相关的,因为在此站点(或其他站点)上没有找到其他任何可以回答ROracle软件包的问题。一些最有希望的问题包括MySQL的答案:在R中从MySQL中获取UTF-8文本将返回“ ????”。 但是我无法使ROracle正常工作。该站点还提供了一些有用的信息,https: //docs.oracle.com/cd/E17952_01/mysql-5.5-en/charset-connection.html在我使用RODBC并能够轻松配置uft-8编码之前。
这是一些示例代码...很抱歉,除非您拥有带utf-8字符的Oracle数据库,否则可能无法复制...由于数据隐私原因,我还更改了主机号和sid ...
library(ROracle)
drv <- dbDriver("Oracle")
# Create the connection string
host <- "10.00.000.86"
port <- 1521
sid <- "f110"
connect.string <- paste(
"(DESCRIPTION=",
"(ADDRESS=(PROTOCOL=tcp)(HOST=", host, ")(PORT=", port, "))",
"(CONNECT_DATA=(SID=", sid, ")))", sep = "")
con <- dbConnect(drv, username = "XXXXXXXXX",
password = "xxxxxxxxx",dbname=connect.string)
my.table <- dbReadTable(con, "DASH_D_PROJECT_INFO")
my.table[40, 1:3]
PROJECT_ID DATE_INPUT PROJECT_NAME
211625 2012-07-01 ??????, ?????????????????? ????? ??????, 1869?1917 [????? 3]
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏。我已经阅读了ROracle软件包的整个文档,并且似乎有一种解决方案,可以编写utf-8字符,但不能读取它们。