oracle xml 轉換
來源:易賢網(wǎng) 閱讀:867 次 日期:2014-10-21 14:13:23
溫馨提示:易賢網(wǎng)小編為您整理了“oracle xml 轉換”,方便廣大網(wǎng)友查閱!

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);--文檔節(jié)點

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--創(chuàng)建xml解析器實例xmlparser.parserxmlpar xmlparser.parser :=xmlparser.newparser;--定義dom文檔xdoc xmldom.domdocument;--定義data子節(jié)點數(shù)目變量lenitme integer;--定義節(jié)點列表,存放data節(jié)點們itemnodes xmldom.domnodelist;--定義節(jié)點列表,存放data子節(jié)點們childnodes xmldom.domnodelist;--定義節(jié)點,存放單個data節(jié)點itemnode xmldom.domnode;--定義屬性變量,存放節(jié)點屬性itemarrmap xmldom.domnamednodemap;--定義其他變量,存放子節(jié)點的值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表中查詢數(shù)據(jù),id不是唯一標識,一個id可查出多條數(shù)據(jù)(xml中多條數(shù)據(jù)),故用loop循環(huán) loop --獲取para_name中的xml字符串 xmlstr:=cur.para_name; xmlpar :=xmlparser.newparser; --解析xmlstr中xml字符串,并存放到xmlpar中 xmlparser.parseclob(xmlpar, xmlstr); --將xmlpar中的數(shù)據(jù)轉存到dom文檔中 xdoc:=xmlparser.getdocument(xmlpar); xmlparser.freeparser(xmlpar); --釋放解析器實例 --獲取所有data節(jié)點 itemnodes:=xmldom.getelementsbytagname(xdoc,'data'); --獲取data節(jié)點的個數(shù) lenitme :=xmldom.getlength(itemnodes); --遍歷所有的data節(jié)點 for i in 0..lenitme-1 loop begin --獲取節(jié)點列表中的第i個data節(jié)點 itemnode:=xmldom.item(itemnodes,i); --獲取第i個data節(jié)點的所有子節(jié)點 childnodes:=xmldom.getchildnodes(itemnode); --獲取所有子節(jié)點的值 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))); --將子節(jié)點的值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技術專欄

更多信息請查看數(shù)據(jù)庫
上一篇:oracle列值合併
下一篇:oracle minus使用
易賢網(wǎng)手機網(wǎng)站地址:oracle xml 轉換

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:526150442(9:00—18:00)版權所有:易賢網(wǎng)