CREATE OR REPLACE PROCEDURE SP_0813_EXPORTTOXML(
in_chkdate in VARCHAR2,
in_hospital in VARCHAR2,
in_busilogid in VARCHAR2,
isSucc out VARCHAR2)
AS
v_file_handle utl_file.file_type;
file_name VARCHAR2(50);
v_errCode VARCHAR2(200);
v_errDesc VARCHAR2(200);
v_start_time date;
personRow CL_HEALTH_LIST%ROWTYPE; --获取游标的行变量
n_zrs number(4);
v_cplsh char(6);
n_count1 number;
n_count2 number;
v_wjm VARCHAR2(50);
v_cplsh_out char(6);
doc xmlDom.DOMDocument := xmldom.newDOMDocument; -- 创建文档对象
main_node xmlDom.DOMNode := xmldom.makeNode(doc); -- 获得文档节点
--==================================================
--以下定义元素
root_g_elmt xmlDom.DOMElement; -- 创建批信息根元素
cplsh_elmt xmlDom.DOMElement; -- 出盘流水号元素
date_elmt xmlDom.DOMElement; -- 体检日期元素
hospital_elmt xmlDom.DOMElement; -- 体检医院元素
zrs_elmt xmlDom.DOMElement; -- 总人数元素
root_p_elmt xmlDom.DOMElement; -- 创建人员信息根元素
person_elmt xmlDom.DOMElement; -- 定义PERSON元素
name_elmt xmlDom.DOMElement; -- 姓名元素
zjhm_elmt xmlDom.DOMElement; -- 身份证号元素
xb_elmt xmlDom.DOMElement; -- 性别元素
age_elmt xmlDom.DOMElement; -- 年龄元素
--==================================================
--以下定义节点
root_g_node xmlDom.DOMNode; --批信息根节点
cplsh_node xmlDom.DOMNode; --出盘流水号元素
date_node xmlDom.DOMNode; --体检日期节点
hospital_node xmlDom.DOMNode; --体检医院节点
zrs_node xmlDom.DOMNode; --总人数节点
root_p_node xmlDom.DOMNode; --人员信息根节点
person_node xmlDom.DOMNode; --定义PERSON节点
name_node xmlDom.DOMNode; --姓名节点
zjhm_node xmlDom.DOMNode; --身份证号节点
xb_node xmlDom.DOMNode; --性别节点
age_node xmlDom.DOMNode; --年龄节点
temp_node xmlDom.DOMNode;
cursor person_cur
is
Select a.*
From CL_HEALTH_LIST a , CL_HEALTH_ACTION b
Where a.Action_No = b.Action_No
And b.Action_Date = in_chkdate
And b.Hospital_Id = in_hospital
And b.Status = 'L'
;
BEGIN
isSucc :=0 ;
v_start_time := sysdate;
Select Lpad(Seq_0813_Cplsh.nextval,6,'0')
Into v_cplsh
From DUAL;
--文件名
file_name := 'L'||To_Char(sysdate,'yyyyMMdd')||in_hospital||v_cplsh||'.xml';
-- 1.向文档节点加入批信息根节点:<GROUP></GROUP>
root_g_elmt := xmldom.createElement(doc, 'GROUP');
root_g_node := xmldom.appendChild(main_node, xmldom.makeNode(root_g_elmt));
cplsh_elmt := xmldom.createElement(doc, 'CPLSH');
cplsh_node := xmldom.appendChild(root_g_node, xmldom.makeNode(cplsh_elmt));
temp_node := xmldom.appendChild(cplsh_node , xmlDom.makeNode(xmldom.createTextNode(doc,v_cplsh)));
date_elmt := xmldom.createElement(doc, 'DATE');
date_node := xmldom.appendChild(root_g_node, xmldom.makeNode(date_elmt));
temp_node := xmldom.appendChild(date_node , xmlDom.makeNode(xmldom.createTextNode(doc,in_chkdate)));
hospital_elmt := xmldom.createElement(doc, 'HOSPITAL');
hospital_node := xmldom.appendChild(root_g_node, xmldom.makeNode(hospital_elmt));
temp_node := xmldom.appendChild(hospital_node , xmlDom.makeNode(xmldom.createTextNode(doc,in_hospital)));
zrs_elmt := xmldom.createElement(doc, 'ZRS');
zrs_node := xmldom.appendChild(root_g_node, xmldom.makeNode(zrs_elmt));
temp_node := xmldom.appendChild(zrs_node , xmlDom.makeNode(xmldom.createTextNode(doc,to_char(n_zrs))));
-- 2.向文档节点加入人员信息根节点:<PEOPLE></PEOPLE>
root_p_elmt := xmldom.createElement(doc, 'PEOPLE');
root_p_node := xmldom.appendChild(main_node, xmldom.makeNode(root_p_elmt));
For personRow In person_cur Loop
person_elmt := xmldom.createElement(doc, 'PERSON'); --创建PERSON元素
-- 向PEOPLE节点加入PERSON节点<PERSON></PERSON>
person_node := xmldom.appendChild(root_p_node, xmldom.makeNode(person_elmt));
--===========================================================================--
--向PERSON节点加入属性ID
xmlDom.SETATTRIBUTE( person_elmt, 'ID', personRow.chk_no );
--===========================================================================--
name_elmt := xmldom.createElement(doc, 'NAME'); --创建NAME元素
--向PERSON节点加入子节点NAME
name_node := xmldom.appendChild(person_node,xmlDom.makeNode(name_elmt));
--向NAME节点加入文本
temp_node := xmldom.appendChild(name_node , xmlDom.makeNode(xmldom.createTextNode(doc,personRow.xm)));
--===========================================================================--
zjhm_elmt := xmldom.createElement(doc, 'ZJHM'); --创建ZJHM元素
--向PERSON节点加入子节点ZJHM
zjhm_node := xmldom.appendChild(person_node,xmlDom.makeNode(zjhm_elmt));
--向ZJHM节点加入文本
temp_node := xmldom.appendChild(zjhm_node, xmlDom.makeNode(xmldom.createTextNode(doc,personRow.zjhm)));
--===========================================================================--
xb_elmt := xmldom.createElement(doc, 'XB'); --创建XB元素
--向PERSON节点加入子节点XB
xb_node := xmldom.appendChild(person_node,xmlDom.makeNode(xb_elmt));
--向XB节点加入文本
temp_node := xmldom.appendChild(xb_node, xmlDom.makeNode(xmldom.createTextNode(doc,personRow.xb)));
--===========================================================================--
age_elmt := xmldom.createElement(doc, 'AGE'); --创建AGE元素
--向PERSON节点加入子节点AGE
age_node := xmldom.appendChild(person_node,xmlDom.makeNode(age_elmt));
--向EMAIL节点加入文本
temp_node := xmldom.appendChild(age_node, xmlDom.makeNode(xmldom.createTextNode(doc,personRow.age)));
--===========================================================================--
END LOOP;
--写入硬盘
xmlDom.writeToFile(doc,'C:/datafile/'||file_name,'GBK');
--将datafile文件转移到health下面
utl_file.frename('C:/datafile',file_name,'C:/datafile/health',file_name,false);
isSucc:=1;
EXCEPTION
WHEN OTHERS THEN
v_errCode:=substr(SQLCODE,0,200);
v_errDesc:=substr(SQLERRM,0,200);
isSucc:=0;
END SP_0813_EXPORTTOXML;
/
xmlDom.writeToFile(doc,'C:/datafile/'||file_name,'GBK');
报错参见hi.baidu.com/geniusian/blog/item/953d24c60090561c9c163d3d.html