从Oracle中具有多个同名标记的Clob列中提取XML标记值
这是我的clob数据从Oracle中具有多个同名标记的Clob列中提取XML标记值,xml,oracle,plsql,Xml,Oracle,Plsql,这是我的clob数据 <id>ID001</id> <atrbtList> <Atrbts> <atrTyp>1</atrTyp> <atrVal>04120101254</atrVal> </Atrbts> <Atrbts> <atrTyp>2</atrTyp> &
<id>ID001</id>
<atrbtList>
<Atrbts>
<atrTyp>1</atrTyp>
<atrVal>04120101254</atrVal>
</Atrbts>
<Atrbts>
<atrTyp>2</atrTyp>
<atrVal>1254</atrVal>
</Atrbts>
</atrbtList>
目前我正在使用oracle xml extract函数,这是我在查询中所做的工作
SELECT
XMLTYPE(xml_clob).extract('//id/text()').getStringVal() AS Id,
EXTRACTVALUE( s1.COLUMN_VALUE, '//atrTyp' ) AS AtrTyp,
EXTRACTVALUE( s.COLUMN_VALUE, '//atrVal' ) AS AtrVal
FROM table_name T,
TABLE(
XMLSequence(
EXTRACT(
XMLType( T.xml_clob ),
'//atrVal'
)
)
) s,
TABLE(
XMLSequence(
EXTRACT(
XMLType( T.xml_clob ),
'//atrTyp'
)
)
) s1
这就产生了结果集
ID |Type |Value
------------------
ID001 1 04120101254
ID001 2 04120101254
ID001 1 1254
ID001 2 1254
有没有人能给我指出正确的方向来获得所需的结果,我也觉得查询的质量可以提高,或者有更好的方法来实现这一点,这是我所缺少的
附言:
表及其内容
CREATE TABLE table_name (xml_clob CLOB );
INSERT INTO table_name VALUES (
'<data><id>ID001</id><atrbtList><Atrbts><atrTyp>1</atrTyp><atrVal>04120101254</atrVal></Atrbts><Atrbts><atrTyp>2</atrTyp><atrVal>1254</atrVal></Atrbts></atrbtList></data>'
);
创建表名(xml\u clob clob);
在表中插入名称值(
“ID00110412010125421254”
);
您正在进行交叉连接2x2=4。您应该将atrbtList作为表(ATRBT序列)获取:
您正在进行交叉连接2x2=4。您应该将atrbtList作为表(ATRBT序列)获取:
CREATE TABLE table_name (xml_clob CLOB );
INSERT INTO table_name VALUES (
'<data><id>ID001</id><atrbtList><Atrbts><atrTyp>1</atrTyp><atrVal>04120101254</atrVal></Atrbts><Atrbts><atrTyp>2</atrTyp><atrVal>1254</atrVal></Atrbts></atrbtList></data>'
);
SELECT XMLTYPE(xml_clob).extract('//id/text()').getStringVal() AS Id,
EXTRACTVALUE( s.COLUMN_VALUE, '/Atrbts/atrTyp' ) AS AtrTyp,
EXTRACTVALUE( s.COLUMN_VALUE, '/Atrbts/atrVal' ) AS AtrVal
FROM table_name T,
TABLE(
XMLSequence(
EXTRACT(
XMLType( T.xml_clob ),
'/data/atrbtList/*'
)
)
) s