Как добавить в элемент атрибуты по условию?
Мне нужно подставить в запрос условие, если 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>