0

我正在使用 Java + iBatis,并且需要调用一个将游标作为参数的 Oracle 存储过程。谷歌在查找如何调用接受游标作为来自 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? 
4

2 回答 2

1

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

如果第一个过程实际上是一个函数,你可以简单地做一个嵌套调用:

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

游标在 Oracle 中传递,根本不需要由 Java 处理。

如果您的第一个过程是一个将游标作为 OUT 参数返回的过程,您可以为它编写一个包装函数并执行相同的操作:

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

然后BEGIN proc2(func1(...)); END;应该工作。

现在,如果您确实需要在两次调用之间使用 Java,那么我会OracleTypes.CURSOR在从第一个过程检索输出值时尝试使用,然后将该对象简单地传递给第二个过程。我不知道这是否可行;如果没有,那么可能没有直接的方法可以做到这一点。

于 2011-06-28T15:19:15.960 回答
0

你不能这样做。

传递到 Oracle 存储过程中的游标表示具有只有 Oracle 才能提供的 API 的对象。您的 Java 程序对游标的了解不足,无法创建某种对象来代理它并将调用转发回 Oracle。

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

于 2011-06-28T14:53:38.447 回答