Oracle xml 轉(zhuǎn)換
來(lái)源:易賢網(wǎng) 閱讀:2301 次 日期:2014-09-16 10:43:07
溫馨提示:易賢網(wǎng)小編為您整理了“Oracle xml 轉(zhuǎn)換”,方便廣大網(wǎng)友查閱!

select * from pdpla_approve_proj;

create or replace procedure proj_xml(st_id varchar2)

is

pro_rows pdpla_approve_proj%rowtype;--行游標(biāo)

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

type cur is ref cursor;--自定義游標(biāo)

proj_cur cur ;--自定義游標(biāo)實(shí)例

doc xmldom.DOMDocument := xmldom.newDOMDocument;--文檔對(duì)象

doc_node xmldom.DOMNode := xmldom.makeNode(doc);--文檔節(jié)點(diǎn)

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;--打開(kāi)游標(biāo)

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解析器實(shí)例xmlparser.ParserxmlPar xmlparser.Parser :=xmlparser.newParser;--定義DOM文檔xDoc xmldom.DOMDocument;--定義DATA子節(jié)點(diǎn)數(shù)目變量lenItme integer;--定義節(jié)點(diǎn)列表,存放DATA節(jié)點(diǎn)們itemNodes xmldom.DOMNodeList;--定義節(jié)點(diǎn)列表,存放DATA子節(jié)點(diǎn)們childNodes xmldom.DOMNodeList;--定義節(jié)點(diǎn),存放單個(gè)DATA節(jié)點(diǎn)itemNode xmldom.DOMNode;--定義屬性變量,存放節(jié)點(diǎn)屬性itemArrMap xmldom.DOMNamedNodeMap;--定義其他變量,存放子節(jié)點(diǎn)的值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表中查詢(xún)數(shù)據(jù),id不是唯一標(biāo)識(shí),一個(gè)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ù)轉(zhuǎn)存到dom文檔中 xDoc:=xmlparser.getDocument(xmlPar); xmlparser.freeParser(xmlPar); --釋放解析器實(shí)例 --獲取所有DATA節(jié)點(diǎn) itemNodes:=xmldom.getElementsByTagName(xDoc,'DATA'); --獲取DATA節(jié)點(diǎn)的個(gè)數(shù) lenItme :=xmldom.getLength(itemNodes); --遍歷所有的DATA節(jié)點(diǎn) for i in 0..lenItme-1 loop begin --獲取節(jié)點(diǎn)列表中的第i個(gè)DATA節(jié)點(diǎn) itemNode:=xmldom.item(itemNodes,i); --獲取第i個(gè)DATA節(jié)點(diǎn)的所有子節(jié)點(diǎn) childNodes:=xmldom.getChildNodes(itemNode); --獲取所有子節(jié)點(diǎn)的值 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é)點(diǎn)的值newid,name,value存放到xmltest insert into xmltest values(newid,name,value); commit; end; end loop; end loop; --是否dom文檔 xmldom.freeDocument(xDoc); --異常和錯(cuò)誤處理 EXCEPTION WHEN OTHERS THEN DBMS_output.PUT_LINE(SQLERRM);end p_parse;

更多信息請(qǐng)查看IT技術(shù)專(zhuān)欄

更多信息請(qǐng)查看數(shù)據(jù)庫(kù)
下一篇:ORACLE列值合併
易賢網(wǎng)手機(jī)網(wǎng)站地址:Oracle xml 轉(zhuǎn)換
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢(xún)回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢(xún)?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽(tīng)報(bào)名

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