7

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

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

当我直接在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 = 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 = 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 完成这项工作感兴趣。

4

1 回答 1

4

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

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

然后尝试执行如下过程:

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

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

于 2017-11-22T14:37:00.800 回答