oracle sql操作xml
2015-04-15 12:10
190 查看
当表中某字段是clob类型,保存的是xml格式的信息,如何利用sql来解析xml呢?
oracle自带强大的xmlPar(function),具体如下:
1.
<root>
<Version id="1">
<ConfigResource>
<Products class="java.util.ArrayList"/>
<Properties class="java.util.ArrayList">
<Property>
<Name>name</Name>
<Value><![CDATA[控江]]></Value>
</Property>
<Property>
<Name lang='cn'>alias</Name>
<Value><![CDATA[控江-黄兴]]></Value>
</Property>
<Property>
<Name>flag</Name>
<Value><![CDATA[53]]></Value>
</Property>
</Properties>
</ConfigResource>
</Version>
</root>
2.存储过程
create or replace function fun_gj_xml(xml_content in clob, name in varchar2)
return varchar2 is
v_result varchar2(2000);
v_temp varchar2(2000);
v_num number;
xmlPar XMLPARSER.parser := XMLPARSER.NEWPARSER; --XML解析器
doc xmldom.DOMDocument; --DOM文档对象
tempNodes xmldom.DOMNodeList;
tempNode xmldom.DOMNode;
tempArrMap xmldom.DOMNamedNodeMap;
begin
v_result := null;
v_temp := null;
v_num := 0;
if xml_content is null then
return v_result;
end if;
xmlPar := xmlparser.newParser;
xmlparser.parseClob(xmlPar,xml_content);
doc := xmlparser.getDocument(xmlPar);
xmlparser.freeParser(xmlPar);
tempNodes:=xmldom.getElementsByTagName(doc, 'Name'); -- 获取所有Name标签元素
while v_num < xmldom.getLength(tempNodes) loop
tempNode:=xmldom.item(tempNodes,v_num);
if(xmldom.getNodeValue(xmldom.getFirstChild(tempNode)) = name) then -- 当前遍历Name节点值是否是传进来的name值
tempArrMap :=xmldom.getAttributes(tempNode);
v_temp :=v_temp || xmldom.getNodeValue(xmldom.getNamedItem(tempArrMap,'lang')) || ','; --获取name=lang的属性值
tempNode := xmldom.getNextSibling(tempNode); --Value 获取下一个兄弟元素,即Value标签
v_temp := v_temp || xmldom.getNodeValue(xmldom.getFirstChild(tempNode)); --获取Value节点值
exit;
end if;
v_num := v_num+1;
end loop;
v_result := v_temp;
return v_result;
end fun_gj_xml;
oracle自带强大的xmlPar(function),具体如下:
1.
<root>
<Version id="1">
<ConfigResource>
<Products class="java.util.ArrayList"/>
<Properties class="java.util.ArrayList">
<Property>
<Name>name</Name>
<Value><![CDATA[控江]]></Value>
</Property>
<Property>
<Name lang='cn'>alias</Name>
<Value><![CDATA[控江-黄兴]]></Value>
</Property>
<Property>
<Name>flag</Name>
<Value><![CDATA[53]]></Value>
</Property>
</Properties>
</ConfigResource>
</Version>
</root>
2.存储过程
create or replace function fun_gj_xml(xml_content in clob, name in varchar2)
return varchar2 is
v_result varchar2(2000);
v_temp varchar2(2000);
v_num number;
xmlPar XMLPARSER.parser := XMLPARSER.NEWPARSER; --XML解析器
doc xmldom.DOMDocument; --DOM文档对象
tempNodes xmldom.DOMNodeList;
tempNode xmldom.DOMNode;
tempArrMap xmldom.DOMNamedNodeMap;
begin
v_result := null;
v_temp := null;
v_num := 0;
if xml_content is null then
return v_result;
end if;
xmlPar := xmlparser.newParser;
xmlparser.parseClob(xmlPar,xml_content);
doc := xmlparser.getDocument(xmlPar);
xmlparser.freeParser(xmlPar);
tempNodes:=xmldom.getElementsByTagName(doc, 'Name'); -- 获取所有Name标签元素
while v_num < xmldom.getLength(tempNodes) loop
tempNode:=xmldom.item(tempNodes,v_num);
if(xmldom.getNodeValue(xmldom.getFirstChild(tempNode)) = name) then -- 当前遍历Name节点值是否是传进来的name值
tempArrMap :=xmldom.getAttributes(tempNode);
v_temp :=v_temp || xmldom.getNodeValue(xmldom.getNamedItem(tempArrMap,'lang')) || ','; --获取name=lang的属性值
tempNode := xmldom.getNextSibling(tempNode); --Value 获取下一个兄弟元素,即Value标签
v_temp := v_temp || xmldom.getNodeValue(xmldom.getFirstChild(tempNode)); --获取Value节点值
exit;
end if;
v_num := v_num+1;
end loop;
v_result := v_temp;
return v_result;
end fun_gj_xml;
相关文章推荐
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- Oracle操作XML各种场景介绍
- oracle xml数据类型常见操作
- Oracle/SQLPlus 相关操作(表空间,用户,权限,字符集等设置)
- T-SQL 操作XML示例
- 通过sql*plus工具操作ORACLE 常用命令
- NULL值的处理和逻辑操作||分组函数(从实践中学习Oracle SQL 第五章 第六章)
- Oracle:SQL语句--对表的操作—— 删除字段(即删除列)
- Oracle:SQL语句--对表的操作——添加外键约束
- oracle开发之<<SQL Cookbook>>学习笔记整理:第三章 操作多个表
- Oracle PL\SQL操作(四)索引与约束
- Oracle操作XML各种场景介绍
- LINQtosqllinqtoxml\JS操作JSON
- Oracle PL/SQL操作(五)
- oracle pl\sql 操作(五) 其他操作
- 如何在centOS等一些linux系统下安装oracle sqldeveloper图形化数据库操作界面
- oracle-sql基本操作1
- ORACLE SQL*PLUS 基本连接与退出操作
- oracle 工作中常用sql及操作
- (轉載)sql server xml字段的操作