我无法通过 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 完成这项工作感兴趣。