背景:Oracle数据库中存在两个数据表t_xml和t_parse,前者是将xml文档中主要节点以字符串的形式存放到para_name字段中,后者用于将para_name字段中xml字符串进行解析,将子节点提取出来进行存放。例如:para_name中的xml字符串为<item><cpu_name>name1</cpu_name><value>80%</value></item>,则在t_parset数据表中将分别提取name1和80%进行存放。t_xml的表结构为<id,para_name>,t_parse的表结构为<id,name,value>,存储的xml字符串结构为<item><cpu_name>name1</cpu_name><value>80%</value></item>。
存储过程:create or replace procedure p_parse (ID in varchar2) is
--创建xml解析器实例xmlparser.Parser
xmlPar xmlparser.Parser :=xmlparser.newParser;--定义DOM文档
xDoc xmldom.DOMDocument;--定义item子节点数目变量lenItme integer;--定义节点列表,存放item节点们itemNodes xmldom.DOMNodeList;--定义节点列表,存放item子节点们
childNodes xmldom.DOMNodeList;--定义节点,存放单个item节点itemNode xmldom.DOMNode;--定义属性变量,存放节点属性itemArrMap xmldom.DOMNamedNodeMap;--定义其他变量,存放子节点的值name varchar(100);
value varchar(100);--定义clob变量,存放xml字符串para_name
xmlStr clob;begin
for cur in (select t.para_name ,t.id from t_xml t where t.id=ID ) --从t_xml表中查询数据,id不是唯一标识,一个id可查出多条数据,故用loop循环
loop --获取para_name中的xml字符串
xmlStr:=cur.para_name;
xmlPar :=xmlparser.newParser; --解析xmlStr中xml字符串,并存放到xmlPar中
xmlparser.parseClob(xmlPar, xmlStr);
--将xmlPar中的数据转存到dom文档中
xDoc:=xmlparser.getDocument(xmlPar); xmlparser.freeParser(xmlPar); --释放解析器实例 --获取所有item节点
itemNodes:=xmldom.getElementsByTagName(xDoc,"item"); --获取item节点的个数
lenItme :=xmldom.getLength(itemNodes); --遍历所有的item节点 for i in 0..lenItme-1
loop
begin --获取节点列表中的第i个item节点
itemNode:=xmldom.item(itemNodes,i); --获取第i个item节点的所有子节点
childNodes:=xmldom.getChildNodes(itemNode); --获取所有子节点的值
name:=xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(childNodes,0)));
value:=xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(childNodes,1))); --将子节点的值name1和80%存放到t_parse表中 insert into t_parse values(ID,name,value);
commit;
end;
end loop;
end loop; --是否dom文档 xmldom.freeDocument(xDoc); --异常和错误处理
EXCEPTION
WHEN OTHERS THEN
DBMS_output.PUT_LINE(SQLERRM);end p_parse;存储过程创建完毕之后,就可以进行测试了,右击存储过程名称,在快捷菜单中点击test进行测试,测试时需要手动输入id值,然后一步一步进行测试即可。更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12HBase集群RS扩容性能验证Rowkey构建方法Oracle数据库中无法对数据表进行insert和update操作解决相关资讯 Oracle存储过程 解析xml字符串
- Oracle存储过程拼接in语句 & 自定 (今 09:21)
- 【PL/SQL系列】Oracle存储过程使用 (04月23日)
- Oracle存储过程及Java调用 (05/28/2015 20:29:33)
| - Java调用Oracle存储过程返回多条结 (04月29日)
- Oracle中的存储过程简单应用 (04月10日)
- 判断点是否落在面中的Oracle存储过 (05/09/2015 09:39:30)
|
本文评论 查看全部评论 (0)
评论声明- 尊重网上道德,遵守中华人民共和国的各项有关法律法规
- 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
- 本站
|