威凡网全力打造:网页编程、软件开发编程、平面设计、服务器端开发、操作系统等在线学习平台!学编程,上威凡网!
数据库>> Mysql Sqlserver Oracle SQlite Access Sybase SQL其他
当前位置:首页 > 数据库 > Oracle
上一节 下一节
 Oraclexml转换

  select * from pdpla_approve_proj;

  create or replace procedure proj_xml(st_id varchar2)

  is

  pro_rows pdpla_approve_proj%rowtype;--行游标

  tempsql varchar2(100) :='select * from pdpla_approve_proj where st_id='''||st_id||'''';--

  type cur is ref cursor;--自定义游标

  proj_cur cur ;--自定义游标实例

  doc xmldom.domdocument := xmldom.newdomdocument;--文档对象

  doc_node xmldom.domnode := xmldom.makenode(doc);--文档节点

  root_ele xmldom.domelement := xmldom.createelement(doc,'root');--文档根元素

  st_pro_ele xmldom.domelement;

  project_ele xmldom.domelement;

  st_pro_node xmldom.domnode;

  root_node xmldom.domnode;

  project_node xmldom.domnode;

  t_node xmldom.domnode;

  cnt number :=1;

  buf varchar2(1000);

  begin

  dbms_output.put_line('tempsql'||tempsql);

  root_node := xmldom.appendchild(doc_node,xmldom.makenode(root_ele));

  xmldom.setattribute(root_ele,'id',st_id);

  open proj_cur for tempsql;--打开游标

  loop

  fetch proj_cur into pro_rows;

  exit when proj_cur%notfound;

  project_ele := xmldom.createelement(doc,'project');

  project_node := xmldom.appendchild(root_node,xmldom.makenode(project_ele));

  st_pro_ele := xmldom.createelement(doc,'st_pro_id');

  st_pro_node := xmldom.appendchild(project_node,xmldom.makenode(st_pro_ele));

  t_node := xmldom.appendchild(st_pro_node,xmldom.makenode(xmldom.createtextnode(doc,pro_rows.st_project_id)));

  st_pro_ele := xmldom.createelement(doc,'st_info_type');

  st_pro_node := xmldom.appendchild(project_node,xmldom.makenode(st_pro_ele));

  t_node := xmldom.appendchild(st_pro_node,xmldom.makenode(xmldom.createtextnode(doc,pro_rows.st_info_type)));

  cnt :=cnt+1;

  end loop;

  close proj_cur;

  xmldom.writetobuffer(doc,buf);

  xmldom.freedocument(doc);

  dbms_output.put_line('cnt'||cnt);

  dbms_output.put_line('doc'||buf);

  exception

  when others then

  dbms_output.put_line('sqlerrm'||sqlerrm);

  end;

  create or replace procedure p_parse (id in varchar2) is--创建xml解析器实例xmlparser.parserxmlpar xmlparser.parser :=xmlparser.newparser;--定义dom文档xdoc xmldom.domdocument;--定义data子节点数目变量lenitme integer;--定义节点列表,存放data节点们itemnodes xmldom.domnodelist;--定义节点列表,,存放data子节点们childnodes xmldom.domnodelist;--定义节点,存放单个data节点itemnode xmldom.domnode;--定义属性变量,存放节点属性itemarrmap xmldom.domnamednodemap;--定义其他变量,存放子节点的值name varchar(100);value varchar(100);newid number(10);--定义clob变量,存放xml字符串para_namexmlstr clob;begin for cur in (select t.xml_data para_name ,t.id from xmldata t where t.id=id ) --从xmldata表中查询数据,id不是唯一标识,一个id可查出多条数据(xml中多条数据),故用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); --释放解析器实例 --获取所有data节点 itemnodes:=xmldom.getelementsbytagname(xdoc,'data'); --获取data节点的个数 lenitme :=xmldom.getlength(itemnodes); --遍历所有的data节点 for i in 0..lenitme-1 loop begin --获取节点列表中的第i个data节点 itemnode:=xmldom.item(itemnodes,i); --获取第i个data节点的所有子节点 childnodes:=xmldom.getchildnodes(itemnode); --获取所有子节点的值 newid:=xmldom.getnodevalue(xmldom.getfirstchild(xmldom.item(childnodes,0))); name:=xmldom.getnodevalue(xmldom.getfirstchild(xmldom.item(childnodes,1))); value:=xmldom.getnodevalue(xmldom.getfirstchild(xmldom.item(childnodes,2))); --将子节点的值newid,name,value存放到xmltest insert into xmltest values(newid,name,value); commit; end; end loop; end loop; --是否dom文档 xmldom.freedocument(xdoc); --异常和错误处理 exception when others then dbms_output.put_line(sqlerrm);end p_parse;


申明:本教程内容由威凡网编辑整理并提供IT程序员分享学习,如文中有侵权行为,请与站长联系(QQ:254677821)!
上一节 下一节
相关教程  
其他教程  
Mysql
Sqlserver
Oracle
SQlite
Access
Sybase
SQL其他

违法和不良信息举报中心】邮箱:254677821@qq.com
Copyright©威凡网 版权所有 苏ICP备2023020142号
站长QQ:254677821