首页
登录 | 注册

ORACLE10导出XML

1.安装xmldom,方法如下:
先在oem中手动创建一个名字为"XDB_TS"的表空间
在oracle服务器上,在命令行中切换到F:\oracle\product\10.2.0\db_1\RDBMS\ADMIN目录,执行如下命令安装xmldom包。
sqlplus /nolog
sql>connect sys/pwd@sid as sysdba;
sql>@catqm.sql password XDB_TS TEMP
命令格式:catqm.sql xdb数据库用户的密码 xdb数据库用户的表空间 xdb数据库用户的临时表空间
详细见:http://www.stanford.edu/dept/itss/docs/oracle/10g/appdev.101/b10790/appaman.htm#CACIBCBA

2. GRANT javauserpriv to 当前用户;
GRANT javasyspriv to 当前用户;
以sys用户登陆执行以下语句:
GRANT EXECUTE ON xmldom TO public;

3. 存储过程如下:

Sql代码
CREATE OR REPLACE PROCEDURE Pr_Frame_Xml_Gen IS
/******************************************************************************
利用job来调度该存储过程将公共数据库的统计数据生成为<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">xml</B>文件,以便多维分析系统生成饼图数据。
作者:李凯飞
编写时间:2009-08-05
******************************************************************************/
workload_file_30 VARCHAR2(128) := 'f:\dwfx_xml\frame.<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">xml</B>';
currentFLMC VARCHAR2(128);
CURSOR cur_mc IS
SELECT DISTINCT 名称 FROM frame;
CURSOR cur IS
select 名称, 分类名称, 人数
FROM frame
WHERE 名称 = currentFLMC
ORDER BY 分类名称 DESC;
personRow cur%ROWTYPE; --获取游标的行变量
doc xmlDom.DOMDocument := xmldom.newDOMDocument; -- 创建文档对象
main_node xmlDom.DOMNode := xmldom.makeNode(doc); -- 获得文档节点
root_elmt xmlDom.DOMElement := xmldom.createElement(doc,
'多维分析展示系统'); -- 创建根元素
--==================================================
--以下定义元素
tjfs_elmt xmlDom.DOMElement; --定义统计方式元素
fl_elmt xmlDom.DOMElement; --定义分类元素
--==================================================
--以下定义节点
root_node xmlDom.DOMNode; --定义统计数据节点
tjfs_node xmlDom.DOMNode; --定义统计方式节点
fl_node xmlDom.DOMNode; --定义分类节点
BEGIN
-- 向文档节点加入根节点:<多维分析展示系统></多维分析展示系统>
root_node := xmldom.appendChild(main_node, xmldom.makeNode(root_elmt));
FOR cur_tjlx_loop IN cur_mc LOOP
currentFLMC := cur_tjlx_loop.名称;
--===========================================================================--
--创建统计类型节点
--===========================================================================--
tjfs_elmt := xmldom.createElement(doc, '统计方式'); --创建统计数据
tjfs_node := xmldom.appendChild(root_node, xmldom.makeNode(tjfs_elmt));
xmlDom.SETATTRIBUTE(tjfs_elmt, '名称', cur_tjlx_loop.名称);
--===========================================================================--
--创建各统计类别下的统计指标项
--===========================================================================--
--打开游标
OPEN cur;
--遍历游标
LOOP
FETCH cur
INTO personRow;
EXIT WHEN cur%NOTFOUND;
--===========================================================================--
fl_elmt := xmldom.createElement(doc, '分类'); --创建分类元素
fl_node := xmldom.appendChild(tjfs_node, xmldom.makeNode(fl_elmt));
--===========================================================================--
--向PERSON节点加入属性下列属性
xmlDom.SETATTRIBUTE(fl_elmt, '分类名称', personRow.分类名称);
xmlDom.SETATTRIBUTE(fl_elmt, '人数', personRow.人数);
--===========================================================================--
END LOOP;
CLOSE cur;
END LOOP;
--写入硬盘
xmlDom.writeToFile(doc, workload_file_30, 'UTF-8');

--发送文件到web服务器中
--Pr_Ftp ( 'ftp -s:D:\gds_oemrep_xml_data\autoftp.conf' );
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
RAISE;
END Pr_Frame_Xml_Gen;

CREATE OR REPLACE PROCEDURE Pr_Frame_Xml_Gen IS
/******************************************************************************
利用job来调度该存储过程将公共数据库的统计数据生成为xml文件,以便多维分析系统生成饼图数据。
作者:李凯飞
编写时间:2009-08-05
******************************************************************************/
workload_file_30 VARCHAR2(128) := 'f:\dwfx_xml\frame.xml';
currentFLMC VARCHAR2(128);
CURSOR cur_mc IS
SELECT DISTINCT 名称 FROM frame;
CURSOR cur IS
select 名称, 分类名称, 人数
FROM frame
WHERE 名称 = currentFLMC
ORDER BY 分类名称 DESC;
personRow cur%ROWTYPE; --获取游标的行变量
doc xmlDom.DOMDocument := xmldom.newDOMDocument; -- 创建文档对象
main_node xmlDom.DOMNode := xmldom.makeNode(doc); -- 获得文档节点
root_elmt xmlDom.DOMElement := xmldom.createElement(doc,
'多维分析展示系统'); -- 创建根元素
--==================================================
--以下定义元素
tjfs_elmt xmlDom.DOMElement; --定义统计方式元素
fl_elmt xmlDom.DOMElement; --定义分类元素
--==================================================
--以下定义节点
root_node xmlDom.DOMNode; --定义统计数据节点
tjfs_node xmlDom.DOMNode; --定义统计方式节点
fl_node xmlDom.DOMNode; --定义分类节点
BEGIN
-- 向文档节点加入根节点:<多维分析展示系统></多维分析展示系统>
root_node := xmldom.appendChild(main_node, xmldom.makeNode(root_elmt));
FOR cur_tjlx_loop IN cur_mc LOOP
currentFLMC := cur_tjlx_loop.名称;
--===========================================================================--
--创建统计类型节点
--===========================================================================--
tjfs_elmt := xmldom.createElement(doc, '统计方式'); --创建统计数据
tjfs_node := xmldom.appendChild(root_node, xmldom.makeNode(tjfs_elmt));
xmlDom.SETATTRIBUTE(tjfs_elmt, '名称', cur_tjlx_loop.名称);
--===========================================================================--
--创建各统计类别下的统计指标项
--===========================================================================--
--打开游标
OPEN cur;
--遍历游标
LOOP
FETCH cur
INTO personRow;
EXIT WHEN cur%NOTFOUND;
--===========================================================================--
fl_elmt := xmldom.createElement(doc, '分类'); --创建分类元素
fl_node := xmldom.appendChild(tjfs_node, xmldom.makeNode(fl_elmt));
--===========================================================================--
--向PERSON节点加入属性下列属性
xmlDom.SETATTRIBUTE(fl_elmt, '分类名称', personRow.分类名称);
xmlDom.SETATTRIBUTE(fl_elmt, '人数', personRow.人数);
--===========================================================================--
END LOOP;
CLOSE cur;
END LOOP;
--写入硬盘
xmlDom.writeToFile(doc, workload_file_30, 'UTF-8');

--发送文件到web服务器中
--Pr_Ftp ( 'ftp -s:D:\gds_oemrep_xml_data\autoftp.conf' );
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
RAISE;
END Pr_Frame_Xml_Gen;

4. 执行后,在oracle 9i中,运行正常,在oracle10中执行 xmlDom.writeToFile时报
ora-29280 ora-06512 SYS.UTL_FILE 路径错误.
解决方式如下:
1、创建你打算输出文件的目录(mkdir dwfx_xml),如:f:\dwfx_xml
2、用文本编辑器打开x:\oracle\product\10.2.0\db_1\database\initkyy.ora文件;
3、在后面追加如下行:
*.utl_file_dir='F:\dwfx_xml'
4、重新启动数据库;
5、在sqlplus中用下面的命令检查是否生效
SQL> show parameter utl_file_dir;
NAME TYPE VALUE
------------------------------------ ----------- --------------
utl_file_dir string F:\dwfx_xml
如果utl_file_dir 参数的value不是你设置的目录或为空(缺省为空),则说明你的设置未生效。

5.生成后内容如下:

Xml代码
<?<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">xml</B> version="1.0" encoding="UTF-8"?>
<多维分析展示系统>
<统计方式 名称="教职工按学历分布饼状图">
<分类 分类名称="专科及以下" 人数="3650"/>
<分类 分类名称="硕士" 人数="1014"/>
<分类 分类名称="博士" 人数="907"/>
<分类 分类名称="本科" 人数="2019"/>
</统计方式>
<统计方式 名称="研究生政治面貌分布情况统计饼图">
<分类 分类名称="中国农工民主党党员" 人数="12"/>
<分类 分类名称="无党派民主人士" 人数="1"/>
<分类 分类名称="群众" 人数="1605"/>
<分类 分类名称="九三学社社员" 人数="2"/>
</统计方式>
</多维分析展示系统>

<?xml version="1.0" encoding="UTF-8"?>
<多维分析展示系统>
<统计方式 名称="教职工按学历分布饼状图">
<分类 分类名称="专科及以下" 人数="3650"/>
<分类 分类名称="硕士" 人数="1014"/>
<分类 分类名称="博士" 人数="907"/>
<分类 分类名称="本科" 人数="2019"/>
</统计方式>
<统计方式 名称="研究生政治面貌分布情况统计饼图">
<分类 分类名称="中国农工民主党党员" 人数="12"/>
<分类 分类名称="无党派民主人士" 人数="1"/>
<分类 分类名称="群众" 人数="1605"/>
<分类 分类名称="九三学社社员" 人数="2"/>
</统计方式>
</多维分析展示系统>


2020 jeepxie.net webmaster#jeepxie.net
10 q. 0.008 s.
京ICP备10005923号