Логика кадрирования DB2 Xml - PullRequest
0 голосов
/ 17 июня 2020
SELECT XMLSERIALIZE( 
          XMLELEMENT(
            NAME "row", 
            XMLFOREST(
              A.TITLE AS "title", 
              A.TAG as "tag" ))) 
   FROM ARTICLES A;

Ожидаемый результат: вместо имени упомянутого столбца (TITLE, TAG) мы сможем сохранить '*' (означает - выбрать * из статей), потому что моя таблица содержит 150 столбцов.

1 Ответ

0 голосов
/ 18 июня 2020

Как сказал @data_henrik, ваш вопрос не ясен ...

Но если я вас правильно понял, вы хотите создать xml do c для всех столбцов из вашей базовой таблицы без необходимо кодировать все 150 столбцов в запросе.

Я не знаю прямого способа сделать это, но вы можете сделать это в два этапа.

1-м шагом будет инструкция SELECT, которая построит ваш окончательный SELECT на основе столбцов из вашей базовой таблицы.

Давайте в качестве примера возьмем таблицу DEPARTMENT из образца db:

db2 => select * from department

DEPTNO DEPTNAME                             MGRNO  ADMRDEPT LOCATION
------ ------------------------------------ ------ -------- ----------------
A00    SPIFFY COMPUTER SERVICE DIV.         000010 A00      -
B01    PLANNING                             000020 A00      -
C01    INFORMATION CENTER                   000030 A00      -
...

в нем 5 столбцов. Следующий выбор создаст ваш окончательный SELECT ...

select 
   'SELECT XMLROW( ' || 
    listagg(rtrim(colname) || ' AS "' || lcase(rtrim(colname)) || '"' , ', ') 
   || ' ) FROM DEPARTMENT'  
from syscat.columns 
where tabname = 'DEPARTMENT'

------------------------------------------------------------------------------------------------------------
SELECT XMLROW( ADMRDEPT AS "admrdept", DEPTNAME AS "deptname", DEPTNO AS "deptno", LOCATION AS "location", MGRNO AS "mgrno" ) FROM DEPARTMENT

Если вы выполните полученный SELECT. он выдаст xml, подобное тому, что вы хотите.

----------------------------------------------------------------------------------------------------------
<row><admrdept>A00</admrdept><deptname>SPIFFY COMPUTER SERVICE DIV.</deptname><deptno>A00</deptno><mgrno>000010</mgrno></row>
<row><admrdept>A00</admrdept><deptname>PLANNING</deptname><deptno>B01</deptno><mgrno>000020</mgrno></row>
<row><admrdept>A00</admrdept><deptname>INFORMATION CENTER</deptname><deptno>C01</deptno><mgrno>000030</mgrno></row>

Примечание: Я использовал XMLROW , для простоты ... вместо вашего XMLSERIALIZE( XMLELEMEENT( XMLFOREST ... просто в качестве примера ... так что вы поняли идею. .

...