SQL - преобразование конвейерной функции в хранимую процедуру / функцию Java

У меня есть следующие типы (тип строки и таблица такого типа строки):

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: Этот вопрос предназначен только для учебных целей.

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

Alex Poole 01.11.2018 13:39

Этот пример выше - всего лишь пример, который я хочу протестировать, чтобы убедиться, что это возможно. Реальное конечное использование состоит в том, что я хочу установить соединение с другой базой данных (DB2) через ODCI, реализованный в JSP, и отобразить некоторые столбцы (вместо конвейерной функции ODCI conn). Я тоже не уверен, возможно ли это, я даже не смог сделать правильный JSP для приведенного выше примера.

Tiberiu Zulean 01.11.2018 14:19

Существует нет пользы для преобразования этой функции PL / SQL в хранимую процедуру Java. На самом деле непонятно, как вы думаете, что хранимая процедура Java решит вашу реальную проблему. Я думаю, если вы попытаетесь сформулировать, какую разницу вы ожидаете увидеть в функции базы данных, написанной на Java, и в процедуре базы данных, написанной на PL / SQL, вы тоже это поймете. Так что, возможно, вам стоит переписать этот вопрос, чтобы представить актуальная проблема, которую вы хотите решить, и позвольте нам попытаться решить это за вас.

APC 01.11.2018 15:34

В конечном итоге я пытаюсь создать JSP, который подключается к DB2 без связи с базой данных, подключенной к прослушивателю, потому что из пула соединений остаются потерянные сеансы. Но вопрос здесь не в этом, мне просто нужно понять, КАК очень общий JSP работает для конвейерного результата (как тот, о котором идет речь выше). В остальном я пытаюсь разобраться сам («настоящая» проблема, которую я буду решать, будет более сложной). Этот вопрос предназначен только для ознакомления.

Tiberiu Zulean 01.11.2018 15:51
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
265
0

Другие вопросы по теме

Похожие вопросы