Прежде чем я отправлюсь в поиски, которые в конечном итоге окажутся безнадежными, я хотел бы спросить тех, у кого больше опыта...
Можно ли создать определяемую пользователем агрегатную функцию для DB2 без прав на загрузку скомпилированных файлов?..? Это для DB2 для AS400 в iSeries v7r3m0.
Моей первой мыслью было создать UDAF как обычную функцию SQL с помощью моего SQL-клиента DBeaver 5.2.5. Я уже создавал обычные UDF таким образом, однако я не уверен, что агрегатную функцию можно написать таким образом. Мне еще предстоит найти какие-либо примеры в Интернете, и это один документ IBM не подходит для моей версии.
Если это невозможно сделать в SQL, то следующий вариант — JAVA. Мои навыки там базовые, но достаточные, чтобы изучить эту возможность, но я впервые делаю это в DB2. Насколько я понимаю, основным препятствием может быть то, что функции JAVA для DB2 требуют загрузки скомпилированных файлов на сервер, но у меня нет для этого прав. Если я не ошибаюсь в этом вопросе..?
Моя следующая мысль заключалась в том, можно ли записывать и компилировать функции JAVA на сервере..? Например, могу ли я написать код JAVA в окне скрипта моего клиента SQL, чтобы при запуске скрипта JAVA компилируется сервером, а затем сохраняется на сервере..? Или, возможно, существует клиент разработки JAVA, такой как IBM Data Studio, который точно так же подключается к серверу. ..?
Или что-то..? Любые предложения будут ценны.
Я объясню UDAF, который я хочу создать. Он будет похож на любой встроенный UDAF, такой как SUM(), но он будет основан на символах и его имя будет GetCommonWords
. Входными данными будет столбец таблицы типа CHAR(n)
. Вывод также будет CHAR(n)
со строкой слов, которые являются общими для начала всех записей.
Рассмотрим следующие фразы для столбца "FOOD"
:
- арахисовое масло
- арахисовое масло и желе
- чашка с арахисовым маслом
- время для желе с арахисовым маслом
Использование будет GetCommonWords(Food)
, а результатом будут слова, общие для всех: peanut butter
.
ARRAY_AGG
. Это не сработает для решения RPG External Scalar, но будет работать в Java из-за поддержки массивов SQL и, вероятно, будет работать и в чистом SQL. Вы можете сгруппировать, используяARRAY_AGG
, взять этот массив и передать его в качестве параметра вашей UDF. Затем вы можете вернуть скалярный результат. Если вам нужно решение для RPG, вы, вероятно, могли бы сделать что-то подобное сLISTAGG
. - person Mike   schedule 04.06.2021