我在使用ROracle的过程中遇到了一些问题,具体是在执行/调用Oracle存储过程时。我已经尝试了很多不同的方法来调用存储过程,但是一直出现相同的错误。虽然我没有问题执行SELECT查询,但调用存储过程却很困难。我既使用了oracleProc函数,也使用了dbSendQuery函数,但都无济于事。ROracle文档中对于调用存储过程的示例非常缺乏,这让我感到失望。
举个例子,假设Oracle存储过程名为MYPROC,所在模式为MYSCHEMA。该存储过程非常简单,没有参数(它涉及读取几个表并将数据写入一个表中)。
当我在Oracle Developer中直接执行该存储过程时,没有任何问题:
以下代码在Oracle Developer中可行(但在R中不可行):
这是我得到的错误信息:
这是我得到的错误信息(与第一个相同):
``` Error in .oci.SendQuery(conn, statement, data = data, prefetch = prefetch, : ```
举个例子,假设Oracle存储过程名为MYPROC,所在模式为MYSCHEMA。该存储过程非常简单,没有参数(它涉及读取几个表并将数据写入一个表中)。
当我在Oracle Developer中直接执行该存储过程时,没有任何问题:
以下代码在Oracle Developer中可行(但在R中不可行):
EXEC MYSCHEMA.MYPROC;
我尝试通过ROracle从R中调用相同的过程,但出现错误。我尝试了多种不同的调用方法,但都遇到了相同的错误:
# 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;")
这是我得到的错误信息(与第一个相同):
``` 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来让它正常工作才有兴趣。
LOAD_query <- oracleProc(con1, "MYSCHEMA.MYPROC")
。我猜你也不需要分号,但也许你需要。 - APC