Как передать Map в функцию Oracle PL / SQL? - PullRequest
3 голосов
/ 24 августа 2009

Я хотел бы создать эквивалент, если этот метод Java как функция PL / SQL в Oracle 10g:

String myMethod(int par1, Map<String, Object> par2);

Можно ли передать карту (или какую-либо аналогичную структуру) в функцию Oracle PL / SQL? Мне нужно как-то вызывать эту функцию из Java.

Ответы [ 3 ]

5 голосов
/ 24 августа 2009

На AskTom есть интересное обсуждение *1002* о передаче Java-объектов в Oracle. В частности, ИМО, это отличный совет от Тома Кайта :

Я, я бы использовал

создать глобальную временную таблицу gtt ( fname varchar2 (20), lname varchar2 (20) ) при коммите удалить строки;

и вставьте пакетное приложение Java. в это, а затем вызвать процедуру, процедура просто использует эти таблицы данные в качестве входных данных.

что, по моему опыту, наименее количество кода между «мной» и «быть закончил "

i-e: просто используйте набор реляционных временных таблиц, напишите в него с помощью java и позвольте pl / sql читать из таблиц. Вероятно, он будет почти таким же эффективным (как проходящие объекты), и его будет легче реализовать и отладить на несколько порядков.

2 голосов
/ 24 августа 2009

По этому пути лежит ужас и отчаяние. Я видел это.

1 голос
/ 24 августа 2009

Читать эта статья об интерфейсе JDBC для коллекций Oracle в первую очередь

В основном для сложных объектов вы должны использовать JPublisher для автоматической генерации классов Java и стандартного кода. В противном случае, простой oracle.sql.ARRAY должен делать.

Обратите внимание, что вам также необходимо создать соответствующие объекты PL / SQL, прочитайте эту статью . Вам не нужно реализовывать какие-либо методы MEMBER для простой передачи данных между Java и Oracle.


Редактировать 1: К сожалению, PL / SQL не имеет такой концепции Map, как Java. Однако вы можете смоделировать карту как специальный объект (ключ, значение) или как индексную таблицу для простого класса (вроде хэш-карты).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...