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

Executing a stored oracle procedure in R using ROracle

我遇到问题 executing/calling R 中通过 ROracle 的 Oracle 过程。我已经尝试了很多不同的方法来调用这个过程,但我总是遇到同样的错误。 我在执行 SELECT 查询时没有问题,但事实证明调用过程很困难。我同时使用了 oracleProc 和 dbSendQuery 函数,但无济于事。它们都不起作用。对于调用过程的示例,Roracle 文档很可怜。

假设 Oracle 过程在 MYSCHEMA 中称为 MYPROC。该过程非常简单,没有参数(它涉及读取几个 tables 并写入 table)

我在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;")

这是我得到的错误:

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

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

Error in .oci.oracleProc(conn, statement, data = data, prefetch = prefetch, : ORA-00900: invalid SQL statement

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

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

Error in .oci.SendQuery(conn, statement, data = data, prefetch = 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 完成这项工作感兴趣。

您是否先创建(编译)了程序?例如:

dbGetQuery(con, "CREATE PROCEDURE MYPROC ... ")

然后尝试执行如下程序:

oracleProc(con, "BEGIN MYPROC(); END;")

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