ORACLE xml解析 xmltable和XMLSEQUENCE解析xml

[复制链接]
查看11 | 回复2 | 2014-11-11 06:00:15 | 显示全部楼层 |阅读模式
今天有需要分析下xml,所以做了个练习,作为备忘,晒出来,也希望大家多提意见。

采用了xmltable和XMLSEQUENCE两种方法解析xml
DECLARE
--xml字符串
v_query VARCHAR2(2000) := '-1SELECT TEST_TB_HXQ.ID FROM TEST_TB_HXQ,USERS a2,C_STOREGRADE a1,TEST_DET a0 WHERE ( (TEST_TB_HXQ.AD_CLIENT_ID=37) ) AND (a0.ID (+)=TEST_TB_HXQ.DBUSER) AND (a1.ID (+)=TEST_TB_HXQ.C_STOREGRADE_ID) AND (a2.ID (+)=TEST_TB_HXQ.MODIFIERID)
20613
394036374138';
--定义记录xml变量
TYPE xml_record_type IS RECORD(
id NUMBER(10),
iquery VARCHAR2(2000),
itable NUMBER(10));
TYPE xml_table_type IS TABLE OF xml_record_type;
xml_table xml_table_type;
--xml类型
v_xml xmltype;

--批量接受secction
TYPE selection_table_type IS TABLE OF VARCHAR2(100);
selection_table selection_table_type;
BEGIN
v_xml := xmltype(v_query);
dbms_output.put_line(CHR(13)||'---------------第一种xmltable解析xml方法---------------');
--查询xml内容
SELECT * BULK COLLECT
INTO xml_table
FROM xmltable('/data' passing v_xml columns id NUMBER(10) path 'id',

iquery VARCHAR2(2000) path 'query',

itable NUMBER(10) path 'table');
--遍历xml数据
FOR temp IN xml_table.first .. xml_table.last
LOOP
dbms_output.put_line('>>id: '||xml_table(temp).id || ' >> itable: '||xml_table(temp).itable);
dbms_output.put_line('>> iquery'||xml_table(temp).iquery );
END LOOP;

dbms_output.put_line(CHR(13)||CHR(13)||'---------------第二种XMLSEQUENCE解析xml方法---------------'||CHR(13));

--获取重复的selection标签
SELECT extractvalue(VALUE(t), '/selection') BULK COLLECT

INTO selection_table

FROM TABLE(XMLSEQUENCE(EXTRACT(v_xml, '/data/selection'))) t;


--遍历xml数据
FOR temp IN selection_table.first .. selection_table.last
LOOP
dbms_output.put_line('>> selection'||selection_table(temp));
END LOOP;
END;




复制代码


回复

使用道具 举报

千问 | 2014-11-11 06:00:15 | 显示全部楼层
执行结果如下:
---------------第一种xmltable解析xml方法---------------
>>id: -1 >> itable: 20613
>> iquerySELECT TEST_TB_HXQ.ID FROM TEST_TB_HXQ,USERS a2,C_STOREGRADE a1,TEST_DET a0 WHERE ( (TEST_TB_HXQ.AD_CLIENT_ID=37) ) AND (a0.ID (+)=TEST_TB_HXQ.DBUSER) AND (a1.ID (+)=TEST_TB_HXQ.C_STOREGRADE_ID) AND (a2.ID (+)=TEST_TB_HXQ.MODIFIERID)

---------------第二种XMLSEQUENCE解析xml方法---------------
>> selection39
>> selection40
>> selection36
>> selection37
>> selection41
>> selection38复制代码

回复

使用道具 举报

千问 | 2014-11-11 06:00:15 | 显示全部楼层
谢谢楼主分享!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行