繁体   English   中英

从 java 如何调用将 oracle cursor 作为参数传递的存储过程

[英]from java how to call a stored procedure passing an oracle cursor as an argument

我正在使用 Java + iBatis 并且需要调用以 cursor 作为参数的 Oracle 存储过程。 谷歌在查找如何调用存储过程的代码示例方面没有帮助我太多,该存储过程接受 cursor 作为来自 java 的参数。

如何实现?

分步场景:

 1. Java calls a Stored Proc passing primitives (varchar, char, etc) as
    parameters 
 2. Java retrieves the cursor returned from Step 1 
 3. Java calls a Stored Proc passing cursor from Step 2 as an argument  //how? 

如果这些真的是唯一的步骤——即你没有在两次调用之间的 Java 中做任何重要的事情——那么对我来说完全避免返回 Java 更有意义。

如果第一个过程实际上是 function,您可以简单地进行一次嵌套调用:

BEGIN proc2(proc1(...)); END;

cursor 在 Oracle 内通过,根本不需要由 Java 处理。

如果您的第一个过程是返回 cursor 作为 OUT 参数的过程,您可以为其编写一个包装器 function 并执行相同的操作:

CREATE OR REPLACE FUNCTION func1(...)
  RETURN SYS_REFCURSOR
  AS
    foo SYS_REFCURSOR;
  BEGIN
    proc1(..., foo);
    RETURN foo;
  END func1;
/

然后BEGIN proc2(func1(...)); END; BEGIN proc2(func1(...)); END; 应该管用。

Now, if you really do need to go out to Java between the two calls, then I would try using OracleTypes.CURSOR when retrieving the output value from the first procedure, then simply pass that object into the second procedure. 我不知道这是否可行; 如果没有,那么可能没有直接的方法可以做到这一点。

你不能这样做。

A cursor passed into an Oracle stored procedure represents an object with an API that only Oracle can provide. Your Java program doesn't know enough about the cursor to create some sort of object that would proxy it and forward the calls back to Oracle.

您将不得不重新设计您的应用程序,以便仅从另一个存储过程调用接受输入 cursor 的存储过程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM