У меня есть следующие типы (тип строки и таблица такого типа строки):
CREATE TYPE t_tf_row AS OBJECT (
id NUMBER,
description VARCHAR2(50)
);
/
CREATE TYPE t_tf_tab IS TABLE OF t_tf_row;
/
И следующая конвейерная функция, которая возвращает информацию для такой таблицы (в этом примере она просто печатает базовую итерацию).
CREATE OR REPLACE FUNCTION get_tab_ptf (p_rows IN NUMBER) RETURN t_tf_tab PIPELINED AS
BEGIN
FOR i IN 1 .. p_rows LOOP
PIPE ROW(t_tf_row(i, 'Description for ' || i));
END LOOP;
RETURN;
END;
/
Вместо использования конвейерной функции с определением, подобным приведенному выше, я хочу использовать хранимую процедуру Java, которая делает то же самое. Как я могу добиться того же результата?
Я хочу иметь возможность вызывать хранимую процедуру / функцию java, как показано ниже:
SELECT *
FROM TABLE(get_tab_ptf(10))
ORDER BY id DESC;
Спасибо
PS: Этот вопрос предназначен только для учебных целей.
Этот пример выше - всего лишь пример, который я хочу протестировать, чтобы убедиться, что это возможно. Реальное конечное использование состоит в том, что я хочу установить соединение с другой базой данных (DB2) через ODCI, реализованный в JSP, и отобразить некоторые столбцы (вместо конвейерной функции ODCI conn). Я тоже не уверен, возможно ли это, я даже не смог сделать правильный JSP для приведенного выше примера.
Существует нет пользы для преобразования этой функции PL / SQL в хранимую процедуру Java. На самом деле непонятно, как вы думаете, что хранимая процедура Java решит вашу реальную проблему. Я думаю, если вы попытаетесь сформулировать, какую разницу вы ожидаете увидеть в функции базы данных, написанной на Java, и в процедуре базы данных, написанной на PL / SQL, вы тоже это поймете. Так что, возможно, вам стоит переписать этот вопрос, чтобы представить актуальная проблема, которую вы хотите решить, и позвольте нам попытаться решить это за вас.
В конечном итоге я пытаюсь создать JSP, который подключается к DB2 без связи с базой данных, подключенной к прослушивателю, потому что из пула соединений остаются потерянные сеансы. Но вопрос здесь не в этом, мне просто нужно понять, КАК очень общий JSP работает для конвейерного результата (как тот, о котором идет речь выше). В остальном я пытаюсь разобраться сам («настоящая» проблема, которую я буду решать, будет более сложной). Этот вопрос предназначен только для ознакомления.




Почему вы хотите внести это изменение - что не так с конвейерной функцией? И как далеко вы продвинулись со своим JSP? Похоже, что это будет намного более сложный процесс, чем у вас сейчас (если это вообще возможно; я не совсем уверен ...)