标签: roracle

仅在查询返回少于n_max行时收集

偶尔连接到我的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)

编辑:

请参阅下面作为答案发布的部分解决方案,不是最佳的,因为浪费了一些时间来获取我没有用的数据.

r dplyr r-dbi roracle dbplyr

14
推荐指数
2
解决办法
790
查看次数

如何安装ROracle包?

我正在尝试安装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

8
推荐指数
1
解决办法
8280
查看次数

使用ROracle在R中执行存储的oracle过程

我无法通过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 stored-procedures r execute roracle

7
推荐指数
1
解决办法
1044
查看次数

使用ROracle dbWriteTable将POSIXct写回Oracle DB

在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)

oracle r date posixct roracle

6
推荐指数
1
解决办法
3112
查看次数

ROracle包安装失败

我知道关于这个问题的其他问题,但它们与我的系统设置或我得到的安装错误没有多少共同之处,所以:

我使用的是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)

r windows-7-x64 roracle rtools

6
推荐指数
2
解决办法
2299
查看次数

ROracle - dbWriteTable,日期列

如何使用将带有日期列的数据框写入 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

oracle r roracle

5
推荐指数
1
解决办法
1680
查看次数

如何在rOracle中指定编码

R的包"rOracle"读取db的西里尔数据时遇到了一些麻烦.我将oracle的nls_lang选项更改为AMERICAN_AMERICA.CL8MSWIN1251,以便rODBC包中的sqlQuery可以正常使用选项DBMSencoding ="CP1251",但我不知道如何使用rOracle的dbGetQuery指定要读取的编码.

有任何想法吗?

oracle encoding r roracle

5
推荐指数
1
解决办法
392
查看次数

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

oracle installation r roracle

5
推荐指数
1
解决办法
3857
查看次数

rstudioapi askForPassword 不屏蔽用户名输入

有没有办法在 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数据库文档中描述的解决方案

想资助一个不屏蔽密码但弹出相同提示的解决方案(如果可能,一行不错的代码......)

passwords r rstudio roracle

5
推荐指数
2
解决办法
2405
查看次数

安装 ROracle

我已经从 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)

oracle r roracle

5
推荐指数
1
解决办法
546
查看次数

ROracle不在R工作室工作

我正在尝试在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没有正确获取路径值的问题.

r rstudio rstudio-server roracle

4
推荐指数
2
解决办法
4566
查看次数

ROracle连接并提取utf8字符

我正在使用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字符,但不能读取它们。

oracle encoding r utf-8 roracle

4
推荐指数
1
解决办法
940
查看次数