在oracle中提供了许多内置的程序包,它们用于扩展数据库的功能。在开发应用程序时,可以利用这些程序包。数据库用户sys拥有oracle提供的所有程序包。他们被定义为共有同义词,并将执行权限授予了public用户组,任何用户都可以访问它们。其中DBMS_XMLQUERY包用于将查询结果转换为XML格式,DBMS_LOB程序包包含雨处理大型对象的过程和函数。下面我们看一下DBMS_XMLQUERY和DBMS_LOB的用法:
为永福等地区用户提供了全套网页设计制作服务,及永福网站建设行业解决方案。主营业务为网站设计、网站建设、永福网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
SQL DECLARE
result CLOB;
xmlstr VARCHAR2(32767);
line VARCHAR2(2000);
line_no INTEGER :=1;
BEGIN
result :=DBMS_XMLQUERY.getXml('select empno,empname from employee');
xmlstr :=DBMS_LOB.SUBSTR(result,32767);
LOOP
EXIT WHEN xmlstr IS NULL;
line :=SUBSTR(xmlstr,1,INSTR(xmlstr,CHR(10)-1));
DBMS_OUTPUT.PUT_LINE(line_no || ':' || line);
xmlstr :=SUBSTR(xmlstr,INSTR(xmlstr,CHR(10)+1));
line_no :=line_no + 1;
END LOOP;
END;
在上面的例子中我们声明了一个CLOB数据类型的result变量,以及VARCHAR2类型的xmlstr和line两个变量。其中,getXml函数用于将查询结果转换为XML格式,SUBSTR函数检索子字符串,32767值指定要从CLOB数据类型读取的最大字节数。检索到的字符串存储xmlstr变量中。LOOP块循环执行,每次从xmlstr中读取一行。INSTR函数返回一个字符串在另一个字符串首次出现的位置。在此,该函数返回换行符在字符串中的位置,直到遇到下一行。
大家觉得例子的结果能不能读出我们预期的结果呢?试试就知道了!!!
结果如下:
?xml version='1.0'?
ROWSET
ROW num="1"
EMPNOE001/EMPNO
EMPNAMEJane/EMPNAME
/ROW
ROW num="2"
EMPNOE002/EMPNO
EMPNAMEJohn/EMPNAME
/ROW
ROW num="3"
EMPNOE003/EMPNO
EMPNAMEJoe/EMPNAME
/ROW
/ROWSET
以下操作在
Oracle9i
、10g版本成功步骤一:创建存放XML文件的目录对象SQLcreateorreplacedirectoryexp_diras'/opt';/--注意此目录要有oracle用户的写权限步骤二:创建过程生成
xml文件
的主过程SQLcreateorreplaceproceduretable2xml(result
inoutnocopyclob,
导出过程基本上就是注释掉不想显示的项,如“PDF、Powerpoint 2007+、Web Archive”,并把Data下面的CSV格式子项移出来。
然后在web界面中点击“管理”-“重新加载文件和元数据” 无须重启即可生效。另外默认的xml文件没有格式,请在网上随便找一个在线xml格式化 工具格式化一下。
假设你的窗体上有一个按钮,在设计器中双击按钮,写以下代码:using
(OracleDataAdapter
=
new
OracleDataAdapter
("select
*
from
表","你的连接字符串")){DataTable
dt
=
new
DataTable("表名");adapter.Fill(dt);dt.WriteXml("C:\\xxx.xml");
//导出到C盘}不过Oracle不用SqlDataAdapter——1)右键你的程序“Add
References……”(灰色文件夹),然后添加System.Data.OracleClient。2)在程序中引入“using
System.Data.OracleClient”。3)编码如下:
请检查一下你 oracle init.ora 或 spfile 中参数 UTL_FILE_DIR 是否正确设置了。这个参数设置的目录必须存在而且必须是 oracle 用户有读写权限的。
检查该参数的值的简单办法:
在数据库服务器上执行:
sqlplus /nolog
connect /as sysdba
show parameter utl_file_dir