Исключить пустые столбцы из XML - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь получить таблицы строк в XML. Я могу сделать это следующим образом, и единственная проблема, которую я имею, заключается в том, что он также генерирует теги XML для пустых столбцов.

create table test_niks_01(x int, y varchar(10));

insert into test_niks_01 values(1, 'ABC');
INSERT INTO test_niks_01 values(2);
INSERT INTO test_niks_01 values(3, '');

--SelecT query_to_xml('SELECT * FROM test_niks_01', false, false, '');

select xmlelement(name "Root", xmlforest (x as X, y as Y));

Вывод XML:

<Root><x>1</x><y>ABC</y></Root>
<Root><x>2</x></Root>
<Root><x>3</x><y></y></Root>

Ожидается XML:

<Root><x>1</x><y>ABC</y></Root>
<Root><x>2</x></Root>
<Root><x>3</x></Root>

Любая помощь будет оценена. Спасибо

1 Ответ

1 голос
/ 05 марта 2020

Вы можете просто использовать nullif(), чтобы превратить пустые строки в null с во втором столбце:

select xmlelement(name "Root", xmlforest (x as X, nullif(y, '') as Y)) from test_niks_01

Демонстрация на DB Fiddle :

| xmlelement                      |
| :------------------------------ |
| <Root><x>1</x><y>ABC</y></Root> |
| <Root><x>2</x></Root>           |
| <Root><x>3</x></Root>           |
...