Если это действительно единственные шаги — т. е. вы не делаете ничего важного в 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
при получении выходного значения из первой процедуры, а затем просто передать этот объект во вторую процедуру. Я не знаю, сработает ли это; если нет, то, вероятно, нет прямого способа сделать это.
person
Dave Costa
schedule
28.06.2011