v_temp clob;
cursor c_table_info is
select name,eno from staff;
v_name varchar2(30);
v_eno integer;
doc XMLDOM.DOMDOCUMENT;
doc_node XMLDOM.DOMNODE;
root_node XMLDOM.DOMNODE;
user_node XMLDOM.DOMNODE;
item_node XMLDOM.DOMNODE;
root_elmt XMLDOM.DOMELEMENT;
user_elmt XMLDOM.DOMELEMENT;
item_elmt XMLDOM.DOMELEMENT;
item_text XMLDOM.DOMTEXT;
begin
--xml header
STAFFINFO :=utl_file.fopen_nchar('DIR','Test.xml','W',32767);--跟前面说的一样必须先创建一个directory才行
STAFFINFO :=utl_file.fopen_nchar(STAFFINFO ,'
UTL_FILE.FFLUSH(STAFFINFO );--直接写入到磁盘文件中,不会停留在内存中
UTL_FILE.FCLOSE(STAFFINFO );
open c_table_info;
loop
fetch c_table_info into v_name,v_eno;
exit when c_table_info%notfound;
--XML节点
doc := XMLDOM.NEWDOMDOCUMENT;
xmldom.setVersion(doc, '1.0');
xmldom.setCharset(doc, 'UTF-8');
doc_node := XMLDOM.MAKENODE(doc);
user_node :=XMLDOM.APPENDCHILD(doc_node, XMLDOM.MAKENODE(user_elmt));
item_elmt :=XMLDOM.CREATEELEMENT(doc,'name');
item_node :=XMLDOM.APPENDCHILD(user_node, XMLDOM.MAKENODE(item_elmt));
item_text := XMLDOM.CREATETEXTNODE(doc,v_name);
item_node:=XMLDOM.APPENDCHILD(item_node, XMLDOM.MAKENODE(item_text));
item_elmt :=XMLDOM.CREATEELEMENT(doc,'eno');
item_node :=XMLDOM.APPENDCHILD(user_node, XMLDOM.MAKENODE(item_elmt));
item_text := XMLDOM.CREATETEXTNODE(doc,eno);
item_node:=XMLDOM.APPENDCHILD(item_node, XMLDOM.MAKENODE(item_text));
v_temp :=' ';
--写入到临时变量v_temp中
XMLDOM.WRITETOCLOB(doc,v_temp);
STAFFINFO :=utl_file.fopen_nchar('DIR','Test.xml','A',32767);--以a模式会在文件后添加内容,用w会覆盖之前的内容
STAFFINFO :=utl_file.fopen_nchar(STAFFINFO ,temp);
UTL_FILE.FFLUSH(STAFFINFO );
UTL_FILE.FCLOSE(STAFFINFO );
XMLDOM.FREEDOCUMENT(doc);
end loop;
close c_table_info;
--xml tail
STAFFINFO :=utl_file.fopen_nchar('DIR','Test.xml','W',32767);
STAFFINFO :=utl_file.fopen_nchar(STAFFINFO ,'
UTL_FILE.FFLUSH(STAFFINFO );
UTL_FILE.FCLOSE(STAFFINFO );
end;
摘自聪明的笨蛋