gpt4 book ai didi

sql - 如何在具有空字符串作为属性的 Oracle 中生成 XML 数据

转载 作者:数据小太阳 更新时间:2023-10-29 02:20:27 25 4
gpt4 key购买 nike

我想使用 Oracle 的 XML 文档生成支持功能生成一个 XML 元素,如下所示

<Example Attr=""></Example>

Attr 是元素Example 的属性,值为空字符串“”。

当我尝试使用 Oracle 的 XML 函数生成 XML 元素时,我无法生成具有值为空字符串的属性的 XML 元素。

select XMLELEMENT("hello", xmlattributes('' as  "Max"))  from  dual

上面查询的结果是

<hello></hello>

注意:Max属性的单引号之间没有空格。

但是我的要求是

<hello Max=""></hello>     -- there is no space between the double quotes.

有办法吗?

最佳答案

如您所知,对于 XMLAttribute "if the value_expr is null, then no attribute is created for that value expression" .

您可以使用 InsertChildXML 解决此问题但它不是很漂亮:

select insertchildxml(xmlelement("hello"), '/hello', '@Max', null) from dual;

INSERTCHILDXML(XMLELEMENT("HELLO"),'/HELLO','@MAX',NULL)
--------------------------------------------------------------------------------
<hello Max=""/>

... 正如您所看到的,它折叠了一个空节点,但如果您希望它看起来与您显示的完全一样,这只是一个潜在的问题 - 它仍然是有效的 XML。有 an even uglier way around that如果你真的需要。

这也暗示了 @smnbbrv 的 replace 的替代方法:

select updatexml(xmlelement("hello", xmlattributes('$$IMPOSSIBLE-VALUE$$' as  "Max")),
'/hello[@Max="$$IMPOSSIBLE-VALUE$$"]/@Max', null) from dual;

UPDATEXML(XMLELEMENT("HELLO",XMLATTRIBUTES('$$IMPOSSIBLE-VALUE$$'AS"MAX")),'/HEL
--------------------------------------------------------------------------------
<hello Max=""/>

如果您的最大属性值来自数据,这可能会更容易,因为您可以将其 NVL 化为不可能的值。虽然我真的不喜欢使用魔法值。

关于sql - 如何在具有空字符串作为属性的 Oracle 中生成 XML 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32380218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com