2013-09-30 4 views
2

Мой клиент использует базу данных db2 без функции listagg, но мне нужно как-то объединить информацию первичного ключа в одном поле.Альтернатива Listagg в db2

Сейчас (для Oracle) Я использую это как часть большего запроса:

SELECT LISTAGG(COLUMN_NAME || ':' || CONTENT, ',') 
WITHIN GROUP (ORDER BY COLUMN_NAME || ':' || CONTENT) 
FROM TABLE 
WHERE ROW_IDENTIFIER_ID = I.REC_ID AND I.TABLE_RESULT_ID = T.REC_ID 

Это есть альтернативный способ, чтобы получить результат функции listagg в базе данных DB2 перед DB2, начиная с версии 9.7 Fix Pack 4 1?

версия базы данных моего клиента: Linux - сервер Enterprise Edition 9.7, номер релиза 08060107
Я получил его, выполнив следующие выбирает:

SELECT * FROM TABLE(SYSPROC.ENV_GET_INST_INFO()) AS SYSTEMINFO; 
SELECT * FROM TABLE(SYSPROC.ENV_GET_PROD_INFO()) AS SYSTEMINFO; 
SELECT * FROM TABLE(SYSPROC.ENV_GET_SYS_INFO()) AS SYSTEMINFO; 

Признаюсь, я не понимаю, как это может быть 9.7, но нет функции listagg ?! : Путать:

Я тоже выполнен:.

SELECT * FROM SYSCAT.FUNCTIONS 

я вернулся этого function list, но нет функции, таких как xmltext или xmlgroup, указанной в альтернативных решениях вниз в ответах :( база данных Что неандерталец является клиент использует? Или я что-то отсутствует?

Спасибо за ответы.

+1

Смотрите, если [это обходной путь] (https://www.ibm.com/developerworks/mydeveloperworks/blogs/SQLTips4DB2LUW/entry/aggregating_strings42? lang = ru) соответствует вашим потребностям. –

+1

Какой сервер DB2 вы используете: DB2 for i, LUW или z/OS? И какая версия? Различные платформы DB2 имеют разные наборы встроенных функций. – WarrenT

+0

Обновленный вопрос с информацией о версии и списком функций. –

ответ

2

Если версия DB2 поддерживает PureXML (это было бы по крайней мере DB2 для LUW 9.1 и я считаю, DB 2 9 для г/OS), в дополнение к тому, что @ PM77-1 было предложено выше, вы можете использовать функцию XMLAgg:

select xmlserialize(
    xmlagg(
    xmlconcat(
     xmltext(column_name), 
     xmltext(':'), 
     xmltext(content), 
     xmltext(',') 
    ) 
) as varchar(10000) 
) 
from 
    yourtable 
... 
+1

Поддержка PureXML на удивление доступна, но функции не указаны в списке, указанном в вопросе. Вместе с обходным наконечником от PM 77-1 мне удалось найти решение. Большое спасибо. –

+1

«Мне удалось найти решение» Было бы замечательно, если бы вы могли поделиться решением, которое вы нашли ... – mathiasrw