描述
您好,我有在甲骨文的XMLType值提取属性名称和值的问题。 基本上,我有一个表,假设TableA
,其中有一个XMLType列,让我们称之为TableA_config
。 在值TableA_config
具有结构是这样的: <TableAConfig someAttribute1="value1" someAttribute2="value2" someAttribute3="value3" />
属性及其名称的数量可能会有所不同,而不是事先知道的。 我需要做的是(每行)创建一个名为新的XMLElement TableAConfigList
,其中包含XMLElements称为TableAConfig
而且每个都有两个属性: name
和value
。 现在,数TableAConfig
节点必须等于在属性数TableA_config
列,并且每个保持对应于属性的名称name
属性,它在数值value
属性。
例
从:
<TableAConfig someAttribute1="value1" someAttribute2="value2" someAttribute3="value3" />
我应该得到:
<TableAConfigList>
<TableAConfig name="someAttribute1" value="value1"/>
<TableAConfig name="someAttribute2" value="value2"/>
<TableAConfig name="someAttribute3" value="value3"/>
</TableAConfigList>
我试着
我想出了主意,以创建一个XMLTable
从TableA_config
列值,并在其中创建两列,这是我以后可以选择。 它看起来是这样的(这是一个更大的查询的片段):
SELECT XMLElement("TableAConfigList",
(SELECT
XMLAgg(
XMLElement("TableAConfig",
XMLAttributes(
tmp."attr_name" as "name",
tmp."attr_text" as "value"
)
)
) from XMLTable('/TableAConfig/@*'
passing TableA.TableA_config
columns
"attr_name" varchar(30) path 'name()',
"attr_text" varchar(30) path 'text()'
) tmp
)
) from dual
但现在我得到:
<TableAConfigList>
<TableAConfig name="someAttribute1"></TableAConfig>
<TableAConfig name="someAttribute2"></TableAConfig>
<TableAConfig name="someAttribute3"></TableAConfig>
</TableAConfigList>
没有value
。 但是,如果我删除name
从XMLAttributes
它显示了。 从:
SELECT XMLElement("TableAConfigList",
(SELECT
XMLAgg(
XMLElement("TableAConfig",
XMLAttributes(
tmp."attr_text" as "value"
)
)
) from XMLTable('/TableAConfig/@*'
passing TableA.TableA_config
columns
"attr_name" varchar(30) path 'name()',
"attr_text" varchar(30) path 'text()'
) tmp
)
) from dual
我得到:
<TableAConfigList>
<TableAConfig value="value1"></TableAConfig>
<TableAConfig value="value2"></TableAConfig>
<TableAConfig value="value3"></TableAConfig>
</TableAConfigList>
我想,也许,出于某种原因,只能有这种方式创建一个属性,但如果我通过硬编码添加一个新的,它显示的结果,就像这样:
SELECT XMLElement("TableAConfigList",
(SELECT
XMLAgg(
XMLElement("TableAConfig",
XMLAttributes(
tmp."attr_text" as "value",
'testValue' as "testAttribute"
)
)
) from XMLTable('/TableAConfig/@*'
passing TableA.TableA_config
columns
"attr_name" varchar(30) path 'name()',
"attr_text" varchar(30) path 'text()'
) tmp
)
) from dual
结果:
<TableAConfigList>
<TableAConfig value="value1" testAttribute="testValue"></TableAConfig>
<TableAConfig value="value2" testAttribute="testValue"></TableAConfig>
<TableAConfig value="value3" testAttribute="testValue"></TableAConfig>
</TableAConfigList>
在把XMLAttributes
列和硬编码的一个给了我name
和testAttribute
,但没有value
。
有人能告诉我是因为我错过了什么非常明显的,它是一个错误还是我这样做完全错误的。 我非常新的Oracle和PL / SQL,可能真的很感谢你的帮助。 谢谢!