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

时间:2017-11-22 08:33:14

标签: r oracle stored-procedures execute roracle

我无法通过ROracle在R中执行/调用Oracle过程。我已经尝试了许多不同的方法来调用该过程,并且我一直遇到同样的错误。 我在执行SELECT查询时没有任何问题,但调用过程非常困难。我已经使用了oracleProc和dbSendQuery函数,但无济于事。它们都不起作用。对于调用过程的例子,Roracle文档很可怜。

让我们说Oracle程序在MYSCHEMA中称为MYPROC。使用NO参数(包括读取几个表并写入表),过程非常简单

当我直接在Oracle Developer中执行该过程时,没有问题:

以下适用于Oracle Developer(但不适用于R)

 EXEC MYSCHEMA.MYPROC;

然后我尝试从R(通过ROracle)调用相同的程序并给我错误。我尝试了许多不同的调用程序的方法,我得到了同样的错误:

 # This didn't work in R
 > require(ROracle)
 > LOAD_query <- oracleProc(con1, "BEGIN EXEC MYSCHEMA.MYPROC; END;")

这是我得到的错误:

  

.oci.oracleProc中的错误(conn,statement,data = data,prefetch =   预取,:

# Then i tried the following and it still didn't work
> LOAD_query <- oracleProc(con1, "EXEC MYSCHEMA.MYPROC;")

这是我得到的错误(与上面的错误有点不同):

  

.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;")

这是我得到的错误(与第一个相同):

  

.oci.SendQuery中的错误(conn,statement,data = data,prefetch =   预取,:

# I even tried the following to exhaust all possibilities. And still no luck. I get the same error as above:
> LOAD_query <- oracleProc(con1, "BEGIN EXEC MYSCHEMA.MYPROC(); END;")

我的程序没有任何参数。正如我所提到的,在Oracle开发人员中调用它时效果很好。 我已经没有想法如何在R中获得如此荒谬的简单查询工作! 我只对通过ROracle获得这项工作感兴趣。

1 个答案:

答案 0 :(得分:3)

您是否首先创建(编译)过程?例如: dbGetQuery(con,“CREATE PROCEDURE MYPROC ...”)

然后尝试执行如下过程: oracleProc(con,“BEGIN MYPROC(); END;”)

你是对的,ROracle :: oracleProc文档并不好。这个例子帮助我: https://community.oracle.com/thread/4058424