create or replace procedure table2xml is
cursor person_cur is select * from human;
person_data human%rowtype;
doc xmldom.DOMDocument;
main_node xmldom.DOMNode;
root_node xmldom.DOMNode;
item_node xmldom.DOMNode;
person_node xmldom.DOMNode;
root_elem xmldom.DOMElement;
item_elem xmldom.DOMElement;
item_text xmldom.DOMText;
begin
open person_cur;
doc := xmldom.newDOMDocument;--创建文档对象
main_node := xmldom.makeNode(doc);--读取文档节点
root_elem := xmldom.createElement(doc,'human'); --添加一个元素(节点)
root_node := xmldom.appendChild(main_node,xmldom.makeNode(root_elem));
loop
fetch person_cur into person_data;
exit when person_cur%notfound;
item_elem := xmldom.createElement(doc,'humanID'); --添加 peopleNo 元素
-- xmldom.setAttribute(item_elem,'humanID',person_data.humanid);--添加peopleNo 属性
person_node:= xmldom.appendChild(root_node,xmldom.makeNode(item_elem));--添加为文档的子节点
item_elem :=xmldom.createElement(doc,'humanName');
item_node :=xmldom.appendChild(person_node,xmldom.makeNode(item_elem));
item_text :=xmldom.createTextNode(doc,person_data.humanName); --设置元素的值
item_node :=xmldom.appendChild(item_node,xmldom.makeNode(item_text)); --把该值加入该节点中
item_elem :=xmldom.createElement(doc,'humanPassword');
item_node :=xmldom.appendChild(person_node,xmldom.makeNode(item_elem));
item_text :=xmldom.createTextNode(doc,person_data.humanPassword); --设置元素的值
item_node :=xmldom.appendChild(item_node,xmldom.makeNode(item_text)); --把该值加入该节点中
end loop;
xmldom.writeToFile(doc,'D:\xml\test.xml','UTF-8');
xmldom.freeDocument(doc);
close person_cur;
end;
执行后,在oracle10中执行 xmlDom.writeToFile时报
ora-29280 ora-06512 SYS.UTL_FILE 路径错误.
解决方式如下:
1、创建你打算输出文件的目录(mkdir xml),如:D:\xml
2、用文本编辑器打开x:\oracle\product\10.2.0\db_2\database\inittest.ora文件;
3、在后面追加如下行:
*.utl_file_dir='D:\xml'
4、重新启动数据库;
5、在sqlplus中用下面的命令检查是否生效
SQL> show parameter utl_file_dir;
NAME TYPE VALUE
------------------------------------ ----------- --------------
utl_file_dir string D:\xml
如果utl_file_dir 参数的value不是你设置的目录或为空(缺省为空),则说明你的设置未生效。