• 爱情文章
  • 亲情文章
  • 友情文章
  • 生活随笔
  • 校园文章
  • 经典文章
  • 人生哲理
  • 励志文章
  • 搞笑文章
  • 心情日记
  • 英语文章
  • 范文大全
  • 作文大全
  • 新闻阅读
  • 当前位置: 山茶花美文网 > 生活随笔 > 正文

    Oracle,xml,转换:xml转换excel

    时间:2020-05-27来源:山茶花美文网 本文已影响 山茶花美文网手机站

    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;

    • Oracle,xml,转换:xml转换excel 相关文章:
    • 爱情文章
    • 亲情文章
    • 友情文章
    • 随笔
    • 哲理
    • 励志
    • 范文大全