Как добавить в элемент атрибуты по условию?

Мне нужно подставить в запрос условие, если type = 5, то добавить атрибуты, иначе оставить элемент без атрибутов.

Пробую как-то так, но не могу добиться, чтобы заработало:

SELECT  XMLELEMENT("FEE", XMLATTRIBUTES(
    E.DEBET AS "DEBET", E.CREDIT AS "CREDIT", 
    --(SELECT CASE WHEN A.TYPE = 5 THEN FEE  END AS "FEE" FROM TABLE)
)
FROM daccount e
WHERE t_account = '12312314GH41123';

Как это можно сделать?


Ответы (1 шт):

Автор решения: 0xdb

Значения атрибутов не могут быть NULL. То есть, атрибуты не будут созданы, если им передать в качестве значений NULL. Из документации:

In the XML_attributes_clause, if the value_expr is null, then no attribute is created for that value expression.

Воспроизводимый пример:

create table daccount (type, fee, debet, credit) as
    select 5, 12, 123, 456 from dual union all
    select 7, 34, 123, 456 from dual
/

select type, xmlElement (fee, xmlAttributes (
    case when type = 5 then debet  end debet, 
    case when type = 5 then credit end credit), fee 
    ).getStringVal() xml
from daccount e

Результат как и ожидалось:

      TYPE XML                                       
---------- ------------------------------------------
         5 <FEE DEBET="123" CREDIT="456">12</FEE>    
         7 <FEE>34</FEE>                             
→ Ссылка