使用 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
我遇到问题 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